Asp.net-Mvc-Routing
ASP.NET Web Api 路由(IIS 與自託管)
我發現 ASP.NET Web Api 中的路由基類存在細微差別,這迫使我編寫了一個小助手類,它允許我只定義一次路由。是否有一個原因?我假設對框架的更改太大,無法使兩者
RouteCollection都從同一個基類派生或實現相同的介面(這會使這個類變得更簡單)public static class RouteMapper { private class Route { public string Name { get; set; } public string Template { get; set; } public object Defaults { get; set; } public Route(string name, string template, object defaults) { Name = name; Template = template; Defaults = defaults; } } private static List<Route> GetRoutes() { return new List<Route> { new Route( "API Default", "api/{controller}/{id}", new {id = RouteParameter.Optional}) }; } public static void AddHttpRoutes(this HttpRouteCollection routeCollection) { var routes = GetRoutes(); routes.ForEach(route => routeCollection.MapHttpRoute(route.Name, route.Template, route.Defaults)); } public static void AddHttpRoutes(this RouteCollection routeCollection) { var routes = GetRoutes(); routes.ForEach(route => routeCollection.MapHttpRoute(route.Name, route.Template, route.Defaults)); } }這允許我做的是
AddHttpRoutes在我的 Global.asax 和我的集成測試中呼叫一個簡單的方法。集成測試
var configuration = new HttpSelfHostConfiguration("http://localhost:20000"); configuration.Routes.AddHttpRoutes(); _server = new HttpSelfHostServer(configuration); _server.OpenAsync().Wait();全球.asax
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.AddHttpRoutes(); routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); }這是一個已知問題嗎?它可能會在以後的 ASP.NET Web Api 版本中得到修復嗎?
是的,路由略有不同,因為 ASP.NET 已經有路由,但我們不能直接依賴它,因為這會阻止自主機支持。我們仍在研究如何讓事情變得更有意義。