2009-09-06 4 views
5

Per un software Asp.Net come applicazione di servizio, desidero creare sottodomini basati sull'account come Basecamp e il resto dei prodotti 37Signals. Per esempio. acme.myapp.com caricherà l'account per quel cliente e ritirerà solo le loro informazioni.Come fare account in stile Basecamp in Asp.Net Mvc?

Questo è facile da fare in Ruby on Rails, ma come gestireste questa funzionalità in ASP.NET MVC e sarete in grado di ridimensionare a possibilmente centinaia di account?

risposta

1

Usiamo:

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

Non è molto diverso rispetto a RoR. Basta ottenere la richiesta HTTP, prendere il valore dell'host, dividerlo (ad ogni punto) e prendere la prima parte per ottenere il sottodominio.

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

Quindi basta risolvere il sottodominio nell'account Aziende.

2

Maarten Balliauw's blog coperto un metodo estendentesi RouteBase. Penso di aver visto anche un gestore di route personalizzato usato per questo.

Inoltre, questo StackOverflow question ha coperto la stessa domanda, utilizzando un approccio più semplicistico.

Consiglio vivamente di includere questo codice nel lato del routing anziché incorporare la logica per ottenere le informazioni sul dominio nei controller.