Frage

Ich habe Beispiele gesucht und gefunden einige, aber sie sind ganz große Projekte. Ich suche einige Beispiel, wie, um loszulegen Aufbau einer MVC Multi-Tenant-Anwendung. Ich denke, der erste Teil der URL zu entziffern wäre.

In ASP.Net das ist, wie ich es tat. Ich habe dies bei DNN-Code aus suchen. Wie würde ich das gleiche tun in MVC?

Global.asax

private void Application_BeginRequest(Object source, EventArgs e)
{
  HttpApplication application = (HttpApplication)source;
  HttpContext context = application.Context;

  string domainName = string.Empty;
  // domaName now contains 'example' if application.Request was www.example.com
  domainName = GetDomainName(application.Request);

  // Using domain, get the info for example from the database
  object myPortal = // get from database
  // Save in context for use on other pages
  context.Items.Add("PortalSettings", myPortal);
}

Da ist in meiner Basepage bekomme ich den Wert aus dem Kontext.

War es hilfreich?

Lösung

  1. Finden Sie den Domain-Namen. Sie sind auf dem richtigen Weg mit dem DNN-Code. Poke Gleich um die Anfrage statischen Variablen im Debugger; es gibt alle Arten von coolen Sachen dort.
  2. Sie werden wahrscheinlich einen Benutzerspeicher benötigen. Ich benutze eine benutzerdefinierte Datenbank, aber man konnte den Microsoft-Mitgliedschaftsanbieter und Profilanbieter nutzen. Sprechen Sie die Domäne einer Eigenschaft des Benutzers oder eine Eigenschaft einer Organisation, und die Organisation einer Eigenschaft des Benutzers.
  3. Speichern der Domäne des Benutzers in dem Cookie, verschlüsselt. Lesen Sie den Cookie zu Beginn des Antrags und die Benutzer machen hat Zugriff auf die org / Domain.
  4. Erstellen Sie eine Base die Steuerung erweitert, dann haben alle Ihre Controller von ihm erben. Im Base, außer Kraft setzen OnActionExecuting. Dies ist ein viel einfacher, Ihre anfängliche Anforderung Rigging als der Global.asax.cs des Begin_request zu tun, weil Sie geschützte Elemente definieren, die jeder Controller zur Verfügung Form sein werden.

Andere Tipps

ich denke, eine noch robustere Einrichtung eine individuelle Route zu definieren wäre. In dieser benutzerdefinierten Route ist, wo Sie die Domäne extrahieren und in die Routen Werte setzen.

Sie können dann die Basis-Controller haben (wie Josh beschrieben), die eine Domain Eigenschaft oder dergleichen und speichert diesen Wert für Bequemlichkeit dort definiert (oder extrahiert sie nur auf Nachfrage, oder so).

Durch sie in die Routen Werte vorne wie das Ziehen, können Sie nutzen diese Informationen überall in der App auf dem Anfragepfad, nicht nur in der Steuerung zu machen, so dass Sie mehr bekommen wiederverwenden aus ihm auf diese Weise. Sie kann zum Beispiel nutzt es in einem benutzerdefinierten Autorisieren artige Filter des Benutzers Recht an diese Domäne zu handhaben, und so weiter.

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