2015-08-13 4 views
1

Я пытаюсь включить 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. Это мой первый вопрос, поэтому, если что-то не хватает, дайте мне знать.

ответ

2
  1. Вы должны переименовать id в key, затем http://localhost:52074/api/Ticket(1) маршрут к Get(1).

  2. Если вы хотите использовать ODataRoute, атрибут должен быть следующим: [ODataRoute("Customers({id})")].

  3. FYI

    odata.org

    odata.github.io/WebApi/