Не могу настроить MVC 4 SqlMembershipProvider

Я настраиваю свой веб-сайт MVC 4 для использования SqlMembershipProvider с хранилищем данных как SQL Server Express 11.0.21xx.

Я установил универсальных поставщиков через NuGet
PM > Install-Package Microsoft.AspNet.Providers

Когда я запускаю приложение и иду в localhost/Accounts/Register и отправляю форму, я получаю эту ошибку
To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider".

в этой строке
WebSecurity.CreateUserAndAccount(model.UserName, model.Password);

У контроллера счетов установлен атрибут [InitializeSimpleMembership]. Но таблицы не создаются из-за вышеупомянутой ошибки.

Раздел web.config обновлен NuGet
<profile defaultProvider="DefaultProfileProvider">
<providers>
<add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
</providers>
</profile>
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
connectionStringName="DefaultConnection"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
<providers>
<add name="DefaultRoleProvider"
type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
</providers>
</roleManager>
<sessionState mode="InProc" customProvider="DefaultSessionProvider">
<providers>
<add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
</providers>
</sessionState>

Строка соединения
<add name="DefaultConnection" connectionString="server=servername\instance;Database=imdb;User Id=sa; Password=passbird;" providerName="System.Data.SqlClient" />

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


person Null Head    schedule 18.04.2013    source источник


Ответы (1)


Все, что мне нужно было сделать, это изменить DefaultMembershipProvider на SimpleMembershipProvider в web.config. Атрибут type важен для правильного понимания.

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" 
         type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" 
         connectionStringName="DefaultConnection" 
         enablePasswordRetrieval="false" 
         enablePasswordReset="true" 
         requiresQuestionAndAnswer="false" 
         requiresUniqueEmail="false" 
         maxInvalidPasswordAttempts="5" 
         minRequiredPasswordLength="6" 
         minRequiredNonalphanumericCharacters="0" 
         passwordAttemptWindow="10" 
         applicationName="/" />
  </providers>
</membership>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
  <providers>
    <add name="DefaultRoleProvider" 
         type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" 
         connectionStringName="DefaultConnection" 
         applicationName="/" />
  </providers>
</roleManager>
person Null Head    schedule 18.04.2013