我發現ASP.NET Web Api中的路由基類有一點點區別,它迫使我編寫一個輔助類來允許我定義路由就一次。是否有一個原因?我假設它是太大的變化框架,以使雙方RouteCollection
■從同一個基類派生或實現相同的接口(將做這類簡單得多)ASP.NET Web Api路由(IIS vs自託管)
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));
}
}
這是什麼讓我要做的就是在我的Global.asax和我的集成測試中調用簡單的AddHttpRoutes
方法。
集成測試
var configuration = new HttpSelfHostConfiguration("http://localhost:20000");
configuration.Routes.AddHttpRoutes();
_server = new HttpSelfHostServer(configuration);
_server.OpenAsync().Wait();
的Global.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的一個以後的版本?
偉大的示例代碼,我稍微修改它以保留原始RouteConfig.cs文件中的所有路由代碼。 – angularsen 2012-12-21 11:31:47