Как начать работу с мультитенантным приложением MVC - PullRequest
4 голосов
/ 19 февраля 2010

Я искал примеры и нашел несколько, но это целые крупные проекты. Я ищу пример того, как начать создавать мультитенантное приложение MVC. Я думаю, первая часть была бы расшифровать URL.

В ASP.Net я так и сделал. Я получил это от просмотра кода DNN. Как бы я сделал то же самое в 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);
}

Затем на моей базовой странице я получаю значение из контекста.

Ответы [ 2 ]

4 голосов
/ 19 февраля 2010

Я думаю, что еще более надежным способом было бы определить собственный маршрут.В этом пользовательском маршруте вы извлекаете домен и помещаете его в значения маршрута.

Затем вы можете иметь базовый контроллер (как описал Джош), который определяет свойство домена или тому подобное и сохраняет там это значение дляудобство (или просто извлекает его по требованию; в любом случае).

Подобным образом перетаскивая его в значения маршрута, вы можете использовать эту информацию в любом месте приложения вдоль пути запроса, а не только в контроллере, так что вы сможете использовать его повторно.сюда.Например, вы можете использовать его в настраиваемом фильтре авторизации для обработки прав пользователя на этот домен и т. Д.

2 голосов
/ 19 февраля 2010
  1. Получить доменное имя.Вы на правильном пути с кодом DNN.Просто покопайтесь в статической переменной Request в отладчике;там есть всякие классные вещи.
  2. Вам, вероятно, понадобится пользовательский магазин.Я использую пользовательскую базу данных, но вы могли бы использовать поставщика членства Microsoft и поставщика профиля.Сделайте домен свойством пользователя или свойством организации, а организации - свойством пользователя.
  3. Храните домен пользователя в файле cookie в зашифрованном виде.Прочитайте файл cookie в начале запроса и убедитесь, что у пользователя есть доступ к этому org / домену.
  4. Создайте BaseController, расширяющий Controller, затем наследуйте все ваши контроллеры.В BaseController переопределите OnActionExecuting.Это гораздо более легкое место для выполнения первоначального подтасовки запросов, чем в Begin_request Global.asax.cs, поскольку вы можете определить защищенные элементы, которые будут доступны на каждом контроллере.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...