asp.net-mvc-4 - 从控制台程序调用时,WebSecurity.InitializeDatabaseConnection 失败并显示 "The Role Manager feature has not been enabled."

标签 asp.net-mvc-4 simplemembership

我有一个使用 SimpleMembership 来验证用户身份的 MVC4 应用程序。

我想从控制台程序添加用户。

引用类库的控制台程序,该类库具有执行用户创建的方法。

看起来像这样:

public class UserBuilder
{
    private static readonly SimpleMembershipInitializer _membershipInitializer;
    private static readonly bool _isInitialized;
    private static readonly object _initializerLock = new object();

    static UserBuilder()
    {
        LazyInitializer.EnsureInitialized(ref _membershipInitializer, ref _isInitialized, ref _initializerLock);
    }

    public void HandleEvent(UserAdded @event)
    {
        if (!WebSecurity.UserExists("ReportModels"))
        {
            WebSecurity.CreateUserAndAccount("ReportModels", "ReportModels");
        };
    }

    private class SimpleMembershipInitializer
    {
        public SimpleMembershipInitializer()
        {
            WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
        }
    }
}

当我启动控制台应用程序时,我在以 WebSecurity.InitializeDatabaseConnection< 开头的行中收到 System.Configuration.Provider.ProviderException {"The Role Manager feature has not beenabled."}/.

我需要做什么才能实现这个目标?

我已经尝试过:

  • 将 nuget 包 Microsoft ASP.NET Web Pages 2 Web Data 添加到控制台项目和类库项目。
  • 这篇文章中列出的答案:SimpleMembershipProvider not working
  • 验证了连接字符串。
  • 验证这些表是否已在数据库中就位。
  • 验证了在 MVC4 项目中创建用户并对其进行身份验证是否有效。

最佳答案

最终解决了这个问题,感谢这篇博文中找到的信息:http://insomniacgeek.com/to-call-this-method-the-membership-provider-property-must-be-an-instance-of-extendedmembershipprovider/以及一些谷歌搜索。

本质上,我需要将其添加到我的 app.config 文件中:

<system.web>
<profile defaultProvider="SimpleProfileProvider">
  <providers>
    <add name="SimpleProfileProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"
        connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</profile>
<membership defaultProvider="SimpleMembershipProvider">
  <providers>
    <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
  </providers>
</membership>
<roleManager defaultProvider="SimpleRoleProvider" enabled="true">
  <providers>
    <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
  </providers>
</roleManager>
</system.web>

请注意 roleManager 元素上的 enabled="true"。否则,将会抛出相同的异常。

关于asp.net-mvc-4 - 从控制台程序调用时,WebSecurity.InitializeDatabaseConnection 失败并显示 "The Role Manager feature has not been enabled.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19766603/

相关文章:

python - ASP.net MVC : How to access project from mobile via Local Server

ASP.Net MVC - 请求生命周期

asp.net - 如何在 Asp.net MVC 4 应用程序中使用 SimpleMemberShip Provider

asp.net-mvc - 如何使用 WebSecurity + SimpleMembership 手动设置 "log a user in"?

html - ASP.NET MVC 中的自定义字体

javascript - 在 asp.net mvc 4 远程验证失败时触发事件

c# - 我如何通过 AJAX 将这种复杂类型发布到我的 MVC 操作中?

asp.net-mvc - Asp.Net SimpleMemberShip 角色管理?

asp.net-mvc - 我需要在所有页面上使用 `[ValidateAntiForgeryToken] and @Html.AntiForgeryToken()` 吗?

asp.net-mvc - ASP.NET SimpleMembership 中密码的自定义验证