2016-03-04 78 views
-1

我在我的繩索末端,我已經用盡了谷歌。我不知道下面的哪一部分可能是錯的?Web API OData v4只提供了404

本地主機:29197 /的OData /測試/返回404

本地主機:29197/OData的$元返回404(或者是本地主機:29197 /的OData/$元數據)?

同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.RegisterRouteConfig.RegisterRoutes

在Web.config包含<modules runAllManagedModulesForAllRequests="true" />

+1

您的代碼在我的環境中正常工作(OWIN在OS X上運行)。看起來像它的IIS或Windows配置問題。 – lencharest

+0

嗯,我在IIS Express上託管本地主機 – 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。我以爲安裝'微軟ASP.NET API API的OData'會更新.... idk是否笑,哭或詛咒....謝謝! – RJB