【问题标题】:"The Role Manager feature has not been enabled", configuration.cs is in a separate project“尚未启用角色管理器功能”,configuration.cs 在单独的项目中
【发布时间】:2013-06-27 15:51:15
【问题描述】:

我有一个 MVC4 应用程序,其中包含模型和迁移在一个单独的项目中,这是一个类库。

我正在尝试使用我的种子方法中的以下代码为旧用户播种数据库

foreach (var subcontractor in context.Subcontractors)
{
    WebSecurity.CreateUserAndAccount(subcontractor.Email, subcontractor.ObsoletePlainTextPassword);
}

我将以下代码从我的主项目复制到 app.config 中,但我认为它没有被采纳。

<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 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>

在我运行更新数据库的地方,我得到The Role Manager feature has not been enabled. 错误。 我错过了什么?

【问题讨论】:

    标签: asp.net-mvc-4 roleprovider


    【解决方案1】:

    问题在于我的“数据”项目不是启动项目。 App.config 没有被读取,这导致了错误。

    【讨论】:

      【解决方案2】:

      MVC4 从 WebMatrix 重建(或者可以说更多是借用)身份验证系统,因此请确保您没有混合来自先前身份验证系统的任何代码。但是,如果您在其中使用默认的安全和身份验证(现在是 SimpleMembership)并且您正在尝试播种角色,则需要在 web.config 中启用 SimpleRoleProvider。您是否尝试在实体迁移的种子方法中为一个或多个具有相应角色的用户播种?如果您没有为数据库播种角色,那么它可能是别的东西。通过在 migrations/congiguration.cs 文件中删除任何提及的种子角色来测试这一点。因此,请确保对 SimpleRoleProvider 的任何提及不在 configuration.cs 文件中,或者在 web.config 中尝试以下代码。

      <roleManager enabled="true" defaultProvider="SimpleRoleProvider">
        <providers>
          <clear/>
          <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
        </providers>
      </roleManager>
      <membership defaultProvider="SimpleMembershipProvider">
        <providers>
          <clear/>
          <add name="SimpleMembershipProvider" 
               type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/>
        </providers>
      </membership>
      

      这样做的原因是,当网站运行时 SimpleRoleProviders 作为 MVC 的一部分可用时,必须将此角色提供程序显式配置为迁移种子方法的一部分。否则迁移中的种子方法将无法获取它。

      【讨论】:

      • 我没有将用户添加到任何角色,只是调用WebSecurity.CreateUserAndAccount。我尝试将您的代码添加到我的 app.config 中,但这也不起作用。是不是因为我的种子方法在类库中而没有被拾起?
      猜你喜欢
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 2019-04-21
      • 2013-08-25
      • 2014-05-10
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多