標籤:style blog class code java color
今天想研究一下Web Api,寫了一個測試Api,開啟網站後瀏覽一下,可是卻提示找不到方法,剛開始以為哪裡配置錯了,可找了半天也沒見。
因為我是在一個現有Mvc網站做的Demo,所以打算建立一個Mvc網站,再試一下,新網站是正常的,對比一下Global檔案,發現WebApiConfig和RouteConfig順序不一樣。
如果把新網站的RouteConfig也放在WebApiConfig之前,同樣提示找不到方法。看來這兩個配置有關聯呀。
?
| 1 2 |
WebApiConfig.Register(GlobalConfiguration.Configuration); RouteConfig.RegisterRoutes(RouteTable.Routes); |
看了一下GlobalConfiguration類就明白了
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public static class GlobalConfiguration { private static Lazy<HttpConfiguration> _configuration = new Lazy<HttpConfiguration>(delegate { HttpConfiguration configuration = new HttpConfiguration(new HostedHttpRouteCollection(RouteTable.Routes)); configuration.Services.Replace(typeof(IAssembliesResolver), new WebHostAssembliesResolver()); configuration.Services.Replace(typeof(IHttpControllerTypeResolver), new WebHostHttpControllerTypeResolver()); configuration.Services.Replace(typeof(IHostBufferPolicySelector), new WebHostBufferPolicySelector()); return configuration; }); public static HttpConfiguration Configuration { get { return _configuration.Value; } } //... } |
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "t/{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } } public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } |
合并後的類似路由:
1 routes.MapHttpRoute( 2 name: "DefaultApi", 3 routeTemplate: "api/{controller}/{id}", 4 defaults: new { id = RouteParameter.Optional } 5 ); 6 routes.MapRoute( 7 name: "Default", 8 url: "{controller}/{action}/{id}", 9 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }10 );
如果順序反了,DefaultApi的路由就永遠匹配不到了,會一直找MVC的路由"{api}/{action}/{id}"。