動態二級域名的實現:
應用場景:目前產品要實現SaaS功能,因為工作需要實現二級域名:www.{CompanyUrl}.xxx.com
假設產品主域名入口為:www.xxx.com
當a公司租戶登錄時:www.a.xxx.com
當b公司租戶登錄時: www.b.xxx.com
首先想到的是對Url的重寫:(網上有關於UrlRewrite的實現。在ASP.NET中這也是常用的手法。)
Route簡介:ASP.NET路由可以不用映射到網站特定文件的URL.由於該 URL 不必映射到文件,因此可以使用對用戶操作進行描述因而更易於被用戶理解的 URL。.NET Framework 3.5 SP1已經包含了ASP.NET Routing引擎。現在微軟已經在ASP.NET WebForms 4.0中增加了對Routing引擎更好的支持,它使用表達式構造器進行雙向Routing。
MVC 應用程序中的典型 URL 模式——來自MSDN
MVC 應用程序中用於路由的 URL 模式通常包括 {controller} 和 {action} 占位符。
當收到請求時,會將其路由到 UrlRoutingModule 對象,然後路由到 MvcHandler HTTP 處理程序。 MvcHandler HTTP 處理程序通過向 URL 中的控制器值添加後綴“Controller”以確定將處理請求的控制器的類型名稱,來確定要調用的控制器。URL 中的操作值確定要調用的操作方法。
MVC項目中添加路由,Global.asax 文件默認的MVC 路由的代碼。
默認配置:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); }
涉及類參考
類 說明 Route 表示 Web 窗體或 MVC 應用程序中的路由。 RouteBase 用作表示 ASP.NET 路由的所有類的基類。 RouteTable 存儲應用程序的路由。 RouteData 包含所請求路由的值。 RequestContext 包含有關對應於路由的 HTTP 請求的信息。 RouteValueDictionary 提供用於存儲路由 Constraints、Defaults 和 DataTokens 對象的方法。 VirtualPathData 提供用於從路由信息生成 URL 的方法。