Ant*_*ott 12 integration-testing asp.net-mvc-routing asp.net-web-api
我发现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));
}
}
Run Code Online (Sandbox Code Playgroud)
这允许我做的是AddHttpRoutes
在我的Global.asax和我的集成测试中调用一个简单的方法.
集成测试
var configuration = new HttpSelfHostConfiguration("http://localhost:20000");
configuration.Routes.AddHttpRoutes();
_server = new HttpSelfHostServer(configuration);
_server.OpenAsync().Wait();
Run Code Online (Sandbox Code Playgroud)
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 }
);
}
Run Code Online (Sandbox Code Playgroud)
这是一个已知问题,是否可能在ASP.NET Web Api的更高版本中修复?
归档时间: |
|
查看次数: |
3219 次 |
最近记录: |