【问题标题】:SimpleMembershipProvider not workingSimpleMembershipProvider 不工作
【发布时间】:2012-08-28 14:16:23
【问题描述】:

我使用 VS2012 开始了一个新的 Internet 项目,并且正在尝试稍微重组我的项目,但我似乎无法让 SimpleMemberhsipProvider 继续工作。基本上,我所做的只是将模型对象与其他几个项目一起移动到核心项目中。我已经实现了 Ninject 并试图通过使用存储库模式来抽象 Entity 来获取我的数据。我真的不觉得我对当前项目有太大的改变,但由于某种原因,当我现在启动应用程序时,我得到:

{“角色管理器功能尚未启用。”}

框架提供的 ActionFilter 是在以下情况下引发错误的地方:

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "Id", "UserName", autoCreateTables: true);

被调用。

这是一些堆栈跟踪:

[ProviderException:角色管理器功能尚未启用。]
System.Web.Security.Roles.EnsureEnabled() +9561885
System.Web.Security.Roles.get_Provider() +8
WebMatrix.WebData.WebSecurity.InitializeProviders(数据库连接信息 连接,字符串 userTableName,字符串 userIdColumn,字符串 userNameColumn,布尔型 autoCreateTables) +104
WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(字符串 connectionStringName,字符串 userTableName,字符串 userIdColumn, 字符串 userNameColumn,布尔型 autoCreateTables) +100
InoutBoard.Core.Infrastructure.Filters.SimpleMembershipInitializer..ctor() 在 c:\Users\Kyle\Documents\Visual Studio 2012\Projects\InoutBoard\InoutBoard.Core\Infrastructure\Filters\InitializeSimpleMembershipAttribute.cs:42

[InvalidOperationException:ASP.NET 简单成员数据库 无法初始化。欲了解更多信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=256588]
InoutBoard.Core.Infrastructure.Filters.SimpleMembershipInitializer..ctor() 在 c:\Users\Kyle\Documents\Visual Studio 2012\Projects\InoutBoard\InoutBoard.Core\Infrastructure\Filters\InitializeSimpleMembershipAttribute.cs:46

我将代码托管在 github 上的以下链接 https://github.com/keroger2k/InoutBoard

【问题讨论】:

标签: asp.net asp.net-mvc entity-framework asp.net-mvc-4 simplemembership


【解决方案1】:

第一种方式

检查sphair's answer out(在当前线程中)。

第二种方式

将以下程序集添加到web.config

<system.web>
  <compilation debug="true" targetFramework="4.5">
    <assemblies>
      <add assembly="WebMatrix.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <add assembly="WebMatrix.WebData, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </assemblies>
  </compilation>
</system.web>

更新

WebMatrix.WebData 程序集包含一个启动方法来初始化成员资格/角色提供程序并启用 RoleManager (PreApplicationStartCode.Start)。但是 ASP.NET 找不到在你的情况下运行。通过添加这两行代码,我们强制 ASP.NET 在这些程序集中搜索PreApplicationStartMethodAttribute(s)

【讨论】:

  • 您能否详细说明为什么需要这样做?
  • 抱歉没有解释,补充。
  • 另请参阅下面关于设置对本地副本的引用的建议答案。
  • 默认Internet Application怎么不用这个?该代码在哪里调用它?
  • 默认 Internet 应用程序将 WebMatrix.Data 和 WebMatrix.WebData 引用设置为 CopyLocal = True。
【解决方案2】:

如果其他人遇到此错误并且上述解决方案不起作用,就像我的情况一样。当我尝试添加程序集标记时,它说无效的子对象。我必须指定 roleManager 和成员资格标签,如下所示。一旦我这样做了,更新数据库就可以工作了。

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

【讨论】:

    【解决方案3】:

    我在我的托管公司(WinHost.com - 他们是优秀的顺便说一句)运行完全相同的错误。

    我的解决方案是添加到 web.config:

    <appSettings>
        <add key="enableSimpleMembership" value="true" />
    </appSettings>
    

    【讨论】:

      【解决方案4】:

      与 Mehdi Golchin 建议的将程序集添加到 web.config 不同,另一种方法是将 WebMatrix.Data 和 WebMatrix.WebData 上的程序集引用更改为 CopyLocal=True。

      【讨论】:

      • 我同意。我也发现了。如果我继续阅读答案,它可能会节省我一些时间:)
      • 我出于某种其他原因一时心血来潮做了这件事(为什么会加载,但这不是?一种事情)并且对此感到非常困惑。
      【解决方案5】:
      猜你喜欢
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 2013-05-20
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多