Frage

Für eine ASP.NET -Software als Serviceanwendung möchte ich Kontobasis -Subdomains wie Basecamp und die restlichen Produkte der 37 -Signals -Produkte durchführen. Z. B. acme.myapp.com lädt das Konto für diesen Kunden und zieht nur ihre Informationen zurück.

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

War es hilfreich?

Lösung

Wir gebrauchen:

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

Andere Tipps

Maarten Balliauws Blog Abdeckte eine Methode, die RouteBase erweitert. Ich glaube, ich habe auch einen benutzerdefinierten Routenhandler gesehen, der dafür verwendet wurde.

Auch diese Stackoverflow -Frage deckte die gleiche Frage unter Verwendung eines vereinfachteren Ansatzes ab.

Ich empfehle auf jeden Fall, diesen Code in die Routing -Seite zu berücksichtigen, anstatt die Logik einzubetten, um Domäneninformationen in Ihre Controller zu erhalten.

Es ist nicht sehr unterschiedlich als ROR. Holen Sie sich einfach die HTTP-Request, nehmen Sie den Host-Wert, teilen Sie ihn (bei jedem Punkt) und nehmen Sie den ersten Teil, um die Subdomain zu erhalten.

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

Lösen Sie dann einfach das Subdomain auf das Unternehmenskonto.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top