2016-05-12 56 views
3

我在我的MVC項目中添加了一個Api控制器。並提出以下更改:使用MVC項目註冊Api控制器路由

我WebApiConfig

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

      config.Routes.MapHttpRoute(
       name: "GetFirms", 
       routeTemplate: "api/B2bApi/GetFirms", 
       defaults: new { controller = "B2bApiController", action= "GetFirms" }); 
     } 
    } 

我註冊在Global.asax中(最後一行)這條路線

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
    RouteConfig.RegisterRoutes(RouteTable.Routes); 
    BundleConfig.RegisterBundles(BundleTable.Bundles); 
    GlobalConfiguration.Configure(WebApiConfig.Register); 
} 

我在調試檢查,發現我的路由記錄。因此,這裏是我的控制器:

public class B2bApiController : ApiController 
    { 
     [HttpGet] 
     public string GetFirms() 
     { 
      return "test"; 
     } 
    } 

,當我瀏覽到

/API/B2bApi/GetFirms

我越來越

404錯誤

什麼是註冊API路線的正確方法?

回答

3

如果asp.net-MVC -4-

WebApiConfig.Register(GlobalConfiguration.Configuration); 

如果asp.net-MVC-5和asp.net-web的API-2

GlobalConfiguration.Configure(WebApiConfig.Register); 

必須放置在上面

RouteConfig.RegisterRoutes(RouteTable.Routes); 

例如:

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 

    //GlobalConfiguration.Configure(WebApiConfig.Register); // use if mvc5  
    WebApiConfig.Register(GlobalConfiguration.Configuration); // use if mvc4 
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
    RouteConfig.RegisterRoutes(RouteTable.Routes); 
    BundleConfig.RegisterBundles(BundleTable.Bundles); 
} 
1

我假設你正在爲WebApi創建一個單獨的項目。

如果我沒有錯,您還沒有在Global.asax中註冊WebApiConfig

除去此

RouteConfig.RegisterRoutes(RouteTable.Routes); 

並添加

WebApiConfig.Register(GlobalConfiguration.Configuration); 

它看起來像 -

enter image description here

0

當指定一個控制器爲默認刪除關鍵字 「控制器」在你身上r控制器名稱。

config.Routes.MapHttpRoute(
     name: "GetFirms", 
     routeTemplate: "api/B2bApi/GetFirms", 
     defaults: new { controller = "B2bApi", action = "GetFirms" }); 

也像其他人所說的將您的註冊移動到頂端。

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 

    WebApiConfig.Register(GlobalConfiguration.Configuration); 
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
    RouteConfig.RegisterRoutes(RouteTable.Routes); 
    BundleConfig.RegisterBundles(BundleTable.Bundles); 
}