我发现在ASP.NET Web Api中的路由基类中有一个小的区别,这迫使我写了一个小帮手类,这样我就可以定义一次路由.有没有理由呢?我假设框架太大了,使得两个RouteCollections都是从同一个基类派生出来的,或者实现了同一个接口(这样可以使这个类更简单)
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.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的更高版本中得到修复?
解决方法
是的,由于ASP.NET已经有路由,但是我们不能直接依赖它,因为这样会阻止自主主机的支持,路由有些不同.我们仍然在看待事情如何变得更有意义.
原文地址:https://www.jb51.cc/aspnet/249451.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。