2009-09-06 12 views
5

Für eine Asp.Net-Software als Dienstanwendung möchte ich kontobasierte Subdomänen wie Basecamp und den Rest der 37Signals-Produkte haben. Z.B. acme.myapp.com lädt das Konto für diesen Kunden und zieht nur deren Informationen zurück.Wie funktioniert das Basecamp-Konto in Asp.Net Mvc?

Dies ist einfach in Ruby on Rails zu tun, aber wie würden Sie diese Funktionalität in ASP.NET MVC handhaben und in der Lage sein, auf möglicherweise Hunderte von Konten zu skalieren?

Antwort

1

wir verwenden:

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

Es ist nicht sehr verschieden im Vergleich zu RoR. Holen Sie sich einfach die HTTP-Anfrage, nehmen Sie den Host-Wert, teilen Sie ihn (an jedem Punkt) und nehmen Sie den ersten Teil, um die Subdomain zu erhalten.

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

Dann lösen Sie einfach die Subdomain zum Firmenkonto auf.

2

Maarten Balliauw's blog Ein Verfahren verlauf RouteBase bedeckt. Ich denke, ich habe auch einen benutzerdefinierten Route-Handler dafür verwendet.

Auch diese StackOverflow question behandelt die gleiche Frage, mit einem vereinfachten Ansatz.

Ich empfehle definitiv, diesen Code in die Routing-Seite zu faktorieren, anstatt die Logik einzubetten, um Domäneninformationen in Ihren Controllern zu erhalten.

Verwandte Themen