Konto basierte Suche in ASP.NET

stimmen
5

Ich freue mich auf ASP.NET für einen neuen SaaS-Dienst, aber für die Liebe von mir kann ich nicht scheinen, um herauszufinden, wie Konto Lookups basierend auf Subdomains wie die meisten SaaS-Anwendungen zu tun (zB 37Signals) tun.

wenn ich yourname.mysite.com Zum Beispiel bieten, wie dann würde ich verwenden ASP.NET (MVC speziell) die Sub-Domain zu extrahieren, damit ich die richtige Vorlage laden kann (der Namen Ihres Unternehmens und dergleichen anzeigt)? Kann es mit regulären Routing getan werden?

Dies scheint eine gemeinsame Sache in SaaS zu sein, so es eine einfache Möglichkeit hat, um es in ASP.NET zu tun; Ich weiß, es gibt Plugins, die es auch für andere Frameworks wie Ruby on Rails zu tun.

Veröffentlicht am 09/12/2008 um 17:59
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
2

Sie sollten dies aus dem holen in der Lage Servervariables- Sammlung, aber zuerst müssen Sie IIS und DNS konfigurieren korrekt zu arbeiten. So wissen Sie 37Signals wahrscheinlich Apache verwenden oder eine andere Open - Source, Unix - Webserver. Auf Apache wird dies als Virtual Hosting .

Um dies zu tun mit IIS müssen Sie einen neuen DNS-Eintrag erstellen (Erstellen ein CNAME yourname.mysite.com zu application.mysite.com) für jede Domäne, die in IIS auf Ihre Anwendung Punkte (application.mysite.com).

Sie erhalten dann einen Host - Header - Eintrag in der IIS - Anwendung erstellen (application.mysite.com), die die Header akzeptieren yourname.mysite.com. Die Nutzer werden tatsächlich getroffen application.mysite, com aber die Adresse ist die individuelle Sub - Domain. Sie gelangen dann auf die Servervariables- Kollektion um den Wert zu erhalten , zu entscheiden , wie die Website anpassen.

Hinweis: Es gibt mehrere alternative Implementierungen Sie je nach Bedarf folgen konnte.

  • Behandeln Sie den Host-Header-Verarbeitung bei einem Hardware-Load-Balancer (wahrscheinlicher 37Signals dies tun, als auf dem Web-Server verlassen), und erstellen Header eine benutzerdefinierte HTTP an die Web-Anwendung zu übergeben.
  • Erstellen Sie eine neue Web-Anwendung und Host-Header für jede einzelne Anwendung. Dies ist wahrscheinlich eine ineffiziente Implementierung für eine große Anzahl von Benutzern, aber eine bessere Isolation und Sicherheit für einige Menschen bieten konnte.
Beantwortet am 09/12/2008 um 18:22
quelle vom benutzer

stimmen
0

So wie ich es getan habe, ist mit HttpContext.Request.ServerVariables [ "HTTP_HOST"]. Split ( "").

Lassen Sie uns wissen, wenn Sie weitere Hilfe benötigen.

Beantwortet am 15/12/2008 um 15:19
quelle vom benutzer

stimmen
3

Dies funktioniert für mich:

    //--------------------------------------------------------------------------------------------------------------------------
    public string GetSubDomain()
    {
        string SubDomain = "";

        if (Request.Url.HostNameType == UriHostNameType.Dns)
            SubDomain = Regex.Replace(Request.Url.Host, "((.*)(\\..*){2})|(.*)", "$2");
        if (SubDomain.Length == 0)
            SubDomain = "www";
        return SubDomain;
    }

Ich gehe davon aus, dass Sie nicht mehrere Konten innerhalb derselben Web-Anwendung zu handhaben möchte, als der Bau separate Websites, um die Werkzeuge in IIS verwenden. In unserer Arbeit haben wir begonnen, für jede Sub-Domain eine neue Website zu schaffen, sondern haben festgestellt, dass dieser Ansatz nicht gut skalierbar ist - vor allem, wenn Sie ein Update freigeben und müssen dann Dutzende von Websites ändern! So ich diesen Ansatz empfehlen, anstatt die serverorientierte Techniken, die oben anhand von mehreren Jahren vorgeschlagen Wert von Erfahrung genau das tun, was Sie vorschlagen.

Der obige Code nur stellt sicher, dass dies eine voll ausgebildete URL (und nicht etwa als eine IP-Adresse) und gibt die Sub-Domain. Es ist gut für uns in einer ziemlich hochvolumigen Umgebung gearbeitet.

Beantwortet am 15/12/2008 um 15:22
quelle vom benutzer

stimmen
1

Sie müssen Ihre DNS konfigurieren Wildcard Sub-Domains zu unterstützen. Es kann durch das Hinzufügen eines A-Eintrag zeigt auf Ihre IP-Adresse, wie dies getan werden:

* A 1.2.3.4

Sobald ihre getan, was auch immer geben Sie vor Ihrer Domain zu Ihrer Stammdomäne gesendet werden, in dem Sie durch Aufteilen des HTTP_HOST Server-Variable, wie der Benutzer erhalten können buggs oben gesagt:

 string user = HttpContext.Request.ServerVariables["HTTP_HOST"].Split(".")

//use the user variable to query the database for specific data

PS. Wenn Sie mit einem Shared-Hosting sind Sie wahrscheinlich zu von ihnen durch einen eindeutigen IP-Addon haben gehen, da es für den Wildcard-Domains obligatorisch ist, zu arbeiten. Wenn Sie mit einem dedizierten Hosting bereits Sie Ihre eigene IP haben.

Beantwortet am 05/01/2009 um 23:36
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more