Я пытаюсь включить OData
в Web Api. Я создал OData
routing и контроллер, который наследует от ODataController
, и я хочу получить некоторые примеры данных из своего приложения. Вот мой код:Маршрутизация OData в Web Api
public class TicketController : BaseWebApiController //inherits from ODataController
{
[EnableQuery]
public IQueryable<TicketModel> Get()
{
return (_ticketService.GetAll());
}
[EnableQuery]
public SingleResult<TicketModel> Get([FromODataUri] int id)
{
return (_ticketService.Get(id));
}
_ticketService
является фиктивным сервисом, который возвращает данные выборки из статического Списка TicketModel с использованием AsQueryable()
метода. Он работает нормально.
public static class ODataConfig
{
public static void EnableOData(HttpConfiguration config)
{
config.MapODataServiceRoute("odata", "api", GetEdmModel(), new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer));
config.EnsureInitialized();
}
private static IEdmModel GetEdmModel()
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<TicketModel>("Ticket");
var edmModel = builder.GetEdmModel();
return edmModel;
}
}
ODataConfig.EnableOData(config)
Затем вызывается в App_Start/WebApiConfig.cs
метода Register.
Проблема, в то время как URL http://localhost:52074/api/Ticket
называет Get()
метод правильно, запрос URL из http://localhost:52074/api/Ticket(1)
также называет Get()
вместо Get(1)
. Я пытался добавить ODataRouting("({id})")
атрибут, но все это делает сгенерирует исключение с сообщением
«Шаблон пути на действия в контроллере не является допустимым шаблон пути OData».
У кого-нибудь была эта проблема раньше? Есть идеи? Помогите оценить.
PS. Это мой первый вопрос, поэтому, если что-то не хватает, дайте мне знать.