我有一个使用 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/