Question

J'ai cherché des exemples et trouvé plusieurs, mais ils sont ensemble de grands projets. Je cherche un certain échantillon sur la façon de commencer la construction d'une application multi-locataire MVC. Je pense, la première partie serait de déchiffrer l'URL.

est en ASP.Net comment je l'ai fait. Je suis cela de regarder le code DNN. Comment puis-je faire la même chose dans 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);
}

Alors dans mon basepage je reçois la valeur du contexte.

Était-ce utile?

La solution

  1. Obtenir le nom de domaine. Vous êtes sur la bonne voie avec le code DNN. Il suffit de farfouiller la demande variable statique dans le débogueur; il y a toutes sortes de trucs cool là-bas.
  2. Vous aurez probablement besoin d'un magasin d'utilisateur. J'utilise une base de données personnalisée, mais vous pouvez utiliser le fournisseur d'appartenances Microsoft et fournisseur de profils. Faire le domaine une propriété de l'utilisateur, ou une propriété d'une organisation, et l'organisation d'une propriété de l'utilisateur.
  3. Magasin de domaine de l'utilisateur dans le cookie, crypté. Lire le cookie au début de la demande, et permettre à l'utilisateur a accès à cette org / domaine.
  4. un BaseController qui étend contrôleur, ont alors tous vos contrôleurs en héritent. Dans le BaseController, passer outre OnActionExecuting. Ceci est beaucoup plus facile endroit pour faire votre gréement de la demande initiale de Begin_request des Global.asax.cs, parce que vous pouvez définir les membres protégés qui seront disponibles sous forme chaque contrôleur.

Autres conseils

Je pense qu'un moyen serait encore plus robuste pour définir un itinéraire personnalisé. Dans cet itinéraire sur mesure est l'endroit où vous extrayez le domaine et le mettre dans les valeurs de la route.

Vous pouvez alors le contrôleur de base (comme Josh décrit) qui définit une propriété de domaine ou similaire et stocke cette valeur là pour la commodité (ou tout simplement extrait sur la demande, de toute façon).

En tirant dans les valeurs de la route à l'avant comme ça, vous pouvez utiliser cette information partout dans l'application sur le chemin de la demande, non seulement dans le contrôleur, vous obtenez plus de réutilisation de cette façon. Vous pouvez, par exemple, utiliser dans un filtre sur mesure comme pour gérer les Autorisez droits de l'utilisateur à ce domaine, et ainsi de suite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top