标签:
最近需要在项目中添加一个Web Api,项目是.net mvc4项目。要想添加一个api,无论你怎么封装,无非就是在Application_Start方法中将WebApi的路由注册进去就行了。例如如下代码:
public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
将上面的Register方法在Application_Start方法中调用就相当于注册完成。可是笔者已经完成了以上工作,访问Api还是404错误,找不到。百思不得其解啊。。。
最后发现原来路由的注册顺序有关系。正常的mvc项目会注册普通Controller,action的路由信息:例如如下代码:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); }
该方法也会在Application_Start中调用。
关键来了::::要先调用Api对应的注册路由方法,后调用普通Controller的路由注册方法。因为笔者是后来在项目中添加的WebApi,所以就在最后注册的Api路由,可就是无法访问到。最后将它在普通路由之前注册就成功访问到了!
不知道这是.net mvc的bug,还是就是这么设计的。
标签:
原文地址:http://www.cnblogs.com/dreamofei/p/4481727.html