Asp.net-Mvc-Routing

ASP.NET Web Api 路由(IIS 與自託管)

  • February 23, 2012

我發現 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 已經有路由,但我們不能直接依賴它,因為這會阻止自主機支持。我們仍在研究如何讓事情變得更有意義。

引用自:https://stackoverflow.com/questions/9409805