3

Я создаю приложение ASP.Net MVC, которое будет запускаться в учетной записи общего хостинга для размещения нескольких доменов. Я начал с шаблона по умолчанию, который включает членство и создал область mvc для каждого домена. Маршрутизация настроена так, чтобы указывать на правильную область в зависимости от домена, для которого требуется запрос. Теперь я хотел бы настроить членство в каждой области mvc. Сначала я попытался сделать очевидный и попытался переопределить раздел web.config для каждой области, чтобы изменить атрибут applicationName поставщика. Это не работает, поскольку область не настроена как корень приложения. Есть ли простой способ разделить пользователей для каждой области?ASP.Net MVC для каждой области членства

+1

Мне немного любопытно, почему вы используете области, чтобы сделать это для начала. На самом деле это не нормальный случай использования. – Mallioch

+0

Что вы описываете, это приложение Multi-Tenant. Сделайте поиск этого термина, и вы найдете несколько примеров. –

+1

@Mallioch Я делаю это, потому что я дешев, и мне нравятся чистые URL-адреса. :) У меня есть одна учетная запись хостинга, но я поддерживаю свой личный домен, а также один для моей церкви, и я начинаю снимать фотографию своей жены. Эта настройка позволяет мне поддерживать каждый домен как логически раздельную область mvc, поддерживать чистые URL-адреса для каждого, но при этом использовать только одну учетную запись хостинга и одну базу данных sql. – AdmSteck

ответ

2

Я думаю, у меня есть рабочее решение, которое держит каждую область полностью отдельной. Используя шаблон по умолчанию в качестве отправной точки, я добавил еще один конструктор в класс MvcApplication1.Models.AccountMembershipService, чтобы принять строку (также изменил существующие конструкторы для устранения неоднозначности).

public AccountMembershipService() 
    { 
     _provider = Membership.Provider; 
    } 

    public AccountMembershipService(MembershipProvider provider) 
    { 
     _provider = provider ?? Membership.Provider; 
    } 

    public AccountMembershipService(string applicationName) 
     : this() 
    { 
     _provider.ApplicationName = applicationName; 
    } 

Затем я скопировал AccountController в каждую область и модифицирован Initialize перегружать включать название области из данных маршрутов.

protected override void Initialize(RequestContext requestContext) 
    { 
     if (FormsService == null) { FormsService = new FormsAuthenticationService(); }    
     if (MembershipService == null) { MembershipService = new AccountMembershipService(requestContext.RouteData.DataTokens["area"].ToString()); } 

     base.Initialize(requestContext); 
    } 

Теперь каждая область зарегистрирована в качестве нового приложения под аутентификацией форм, а все пользователи и роли должны храниться отдельно.

Смежные вопросы