2016-03-04 3 views
-1

Я нахожусь в конце своей веревки, у меня закончились вещи в Google. Я не знаю, какая часть ниже может быть неправильной?Web API OData v4 дает только 404

локальный: 29197/OData/Тесты/возвращает 404

локальный: 29197/OData $ метаданных возвращает 404 (или это локальный: 29197/OData/$ метаданных)?

Same 404 с или без префикс маршрута.

Контроллер:

namespace MvcApplication.Api 
{ 
    public class TestsController : ODataController 
    { 
     [EnableQuery] 
     public IQueryable<Test> Get() 
     { 
      return new List<Test>() {new Test() {Id = 1}}.AsQueryable(); 
     } 
    } 
} 

WebApiConfig:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

     config.MapODataServiceRoute(routeName: "odata", routePrefix: "odata", model: GetEdmModel()); 
    } 

    private static IEdmModel GetEdmModel() 
    { 
     var builder = new ODataConventionModelBuilder(); 

     builder.EntitySet<Test>("Tests"); 

     var model = builder.GetEdmModel(); 
     return model; 
    } 
} 

WebApiConfig.Register предшествует RouteConfig.RegisterRoutes

web.config, содержит <modules runAllManagedModulesForAllRequests="true" />

+1

Ваш код отлично работает в моей среде (Owin работает на OS X). Похоже на проблему с IIS или Windows. – lencharest

+0

Хмм, я хостинг в IIS Express на localhost – RJB

+0

Кстати, правильные URI для вашей службы - это http: // localhost: 29197/odata/$ metadata' и 'http: // localhost: 29197/odata/Tests'. – lencharest

ответ

0

Просто убедитесь, что вы зарегистрировали WebAPI conffig в запуске приложения событие в Global.asax.cs, как показано ниже -

public class WebApiApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
    } 
} 
+0

У меня есть 'WebApiConfig.Register (GlobalConfiguration.Configuration);'. Другой не распознается. Я видел оба способа в Интернете, но я не уверен, что стоит за разницей? – RJB

+0

О ... разница в том, что у меня нет 'Web API 2.2' 5.x, у меня все еще было 4.0. Я думал, что установка 'Microsoft ASP.NET Web API 2.2 для OData' обновит его ... idk, смеяться, плакать или проклинать .... Спасибо! – RJB

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