我在我的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路由的正确方法是什么?
答案 0 :(得分: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 :(得分:1)
我假设您正在为WebApi创建一个单独的项目。
如果我没错,您还没有在WebApiConfig
注册Global.asax
。
删除此
RouteConfig.RegisterRoutes(RouteTable.Routes);
并添加
WebApiConfig.Register(GlobalConfiguration.Configuration);
看起来像 -
答案 2 :(得分:0)
为默认值指定控制器时,请在控制器名称中删除关键字“controller”。
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);
}