對於Asp.Net軟件作爲服務應用程序,我想要做基於帳戶的子域名,如Basecamp和其他37Signals產品。例如。 acme.myapp.com將爲該客戶加載該帳戶並僅將其信息撤回。如何在Asp.Net Mvc中做Basecamp風格的賬戶?
這在Ruby on Rails中很容易實現,但是如何處理ASP.NET MVC中的這個功能,並且能夠擴展到數百個賬戶?
對於Asp.Net軟件作爲服務應用程序,我想要做基於帳戶的子域名,如Basecamp和其他37Signals產品。例如。 acme.myapp.com將爲該客戶加載該帳戶並僅將其信息撤回。如何在Asp.Net Mvc中做Basecamp風格的賬戶?
這在Ruby on Rails中很容易實現,但是如何處理ASP.NET MVC中的這個功能,並且能夠擴展到數百個賬戶?
我們使用:
public static string GetSubDomain()
{
string subDomain = String.Empty;
if (HttpContext.Current.Request.Url.HostNameType == UriHostNameType.Dns)
{
subDomain = Regex.Replace(HttpContext.Current.Request.Url.Host, "((.*)(\\..*){2})|(.*)", "$2");
}
if (subDomain.Length == 0)
{
subDomain = "www";
}
return subDomain.Trim().ToLower();
}
與RoR相比,它沒有什麼不同。只需獲取HTTP請求,獲取主機值,將其分開(在每個點),並拿第一部分來獲取子域。
string subdomain = requestContext.HttpContext.
Request.Headers["Host"].Split('.')[0];
然後只是將子域名解析爲公司帳戶。
Maarten Balliauw's blog覆蓋延伸RouteBase一個方法。我想我也看到了用於此的自定義路由處理程序。
此外,此StackOverflow question涵蓋了同樣的問題,使用更簡單的方法。
我絕對推薦將此代碼放入路由端,而不是嵌入邏輯以在您的控制器中獲取域信息。