2013-05-22 2 views
0

Я не могу правильно настроить мои контроллеры и сопоставления. Я могу подключиться просто отлично, если я вернусь к стандартному ApiController и сопоставлению по умолчанию, но не могу подключиться с использованием типа EntityController и OData. Я получаю ошибку 406 с сервера при попытке ссылки на localhost: port/odata/persons Мой код ...Не удается правильно настроить службу Odata

(PS - все мои ссылки и привязки, похоже, правильно настроены ... нет ошибок любой вид.)

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

     //Create Entity Data Model 
     ODataModelBuilder modelBuilder = new ODataConventionModelBuilder(); 
     modelBuilder.EntitySet<Person>("Persons"); 

     //Configure Endpoint 
     Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel(); 
     config.Routes.MapODataRoute("ODataRoute", "odata", model); 
    } 
} 


public class PersonsController : EntitySetController<Person, int> 
{ 
    static IList<Person> _peeps = new List<Person>() 
    { 
     new Person() {ID = 1, FirstName = "Ringo", LastName = "Starr", BirthDate = new DateTime(1940, 7, 7)}, 
     new Person() {ID = 2, FirstName = "John", LastName = "Lennon", BirthDate = new DateTime(1940, 10, 9)}, 
     new Person() {ID = 3, FirstName = "Paul", LastName = "McCartney", BirthDate = new DateTime(1942, 6, 18)}, 
     new Person() {ID = 4, FirstName = "George", LastName = "Harrison", BirthDate = new DateTime(1943, 2, 25)}, 
    }; 

    // GET api/person 
    [Queryable] 
    public override IQueryable<Person> Get() 
    { 
     return _peeps.AsQueryable(); 
    } 

    // GET api/person/5 
    protected override Person GetEntityByKey(int id) 
    { 
     return _peeps.FirstOrDefault(p => p.ID == id); 
    } 
} 

ответ

2

Это очень простой сценарий, который должен был сработать. Не могли бы вы рассказать, как выглядит ваш сырой запрос, а также класс Person?

Также вам необходимо использовать localhost:port/odata/Persons (Лица вместо лиц). OData Uris чувствительны к регистру.

+0

Корпус был проблемой. Благодаря! – unforgiven1987

+0

Я дам вам двойные баллы, если вы скажете мне, почему, для любви ко всему святому, маршруты чувствительны к регистру. – unforgiven1987

+0

Спецификация OData требует, чтобы имена объектов были чувствительны к регистру. Это печально. Я думаю, что есть рабочий элемент для включения нечувствительной к регистру OData маршрутизации для будущей версии Web API. –

Смежные вопросы