2009-09-06 31 views
5

對於Asp.Net軟件作爲服務應用程序,我想要做基於帳戶的子域名,如Basecamp和其他37Signals產品。例如。 acme.myapp.com將爲該客戶加載該帳戶並僅將其信息撤回。如何在Asp.Net Mvc中做Basecamp風格的賬戶?

這在Ruby on Rails中很容易實現,但是如何處理ASP.NET MVC中的這個功能,並且能夠擴展到數百個賬戶?

回答

1

我們使用:

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(); 
     } 
1

與RoR相比,它沒有什麼不同。只需獲取HTTP請求,獲取主機值,將其分開(在每個點),並拿第一部分來獲取子域。

string subdomain = requestContext.HttpContext. 
         Request.Headers["Host"].Split('.')[0]; 

然後只是將子域名解析爲公司帳戶。

2

Maarten Balliauw's blog覆蓋延伸RouteBase一個方法。我想我也看到了用於此的自定義路由處理程序。

此外,此StackOverflow question涵蓋了同樣的問題,使用更簡單的方法。

我絕對推薦將此代碼放入路由端,而不是嵌入邏輯以在您的控制器中獲取域信息。

相關問題