2016-05-12 53 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); 
}