2009-09-06 6 views
5

Pour un logiciel Asp.Net en tant qu'application de service, je souhaite utiliser des sous-domaines basés sur des comptes tels que Basecamp et le reste des produits 37Signals. Par exemple. acme.myapp.com va charger le compte pour ce client et retirer seulement leurs informations. Ceci est facile à faire dans Ruby on Rails, mais comment gérer cette fonctionnalité dans ASP.NET MVC et être capable d'évoluer vers des centaines de comptes?Comment faire des comptes de style Basecamp dans Asp.Net Mvc?

Répondre

1

Nous utilisons:

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

Ce n'est pas très différent de RoR. Obtenez simplement la requête HTTP, prenez la valeur de l'hôte, divisez-la (à chaque point) et prenez la première partie pour obtenir le sous-domaine.

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

Ensuite, il suffit de résoudre le sous-domaine pour le compte sociétés.

2

Maarten Balliauw's blog couvert d'une méthode extension RouteBase. Je pense que j'ai également vu un gestionnaire de route personnalisé utilisé pour cela.

En outre, ce StackOverflow question a couvert la même question, en utilisant une approche plus simpliste.

Je recommande vivement de factoriser ce code dans le routage plutôt que d'intégrer la logique pour obtenir des informations de domaine dans vos contrôleurs.

Questions connexes