我正在将所有身份验证和安全问题转移到 ASP.NET MVC4 Internet 应用程序上的数据访问层中。登录、注销、创建用户等一切都很好,但我在将用户添加到角色时遇到了一个绊脚石。
创建用户帐户后,我想将它们添加到一些默认角色。这样做的方法如下所示
public static string CreateUserAccount(string username, string password)
{
WebSecurity.CreateUserAndAccount(username, password);
var roleProvider = new SimpleRoleProvider();
roleProvider.AddUsersToRoles(new[] {username}, new[] {"MeterInfo", "SiteInfo", "AMRInfo", "InstallImages"});
return username + " Account Created";
}
WebSecurity
创建帐户的调用是可以的,但是我的使用SimpleRoleProvider
导致了这个错误
在调用“WebSecurity”类的任何其他方法之前,您必须调用“WebSecurity.InitializeDatabaseConnection”方法。此调用应放置在站点根目录中的 _AppStart.cshtml 文件中。
InitializeDatabaseConnection
已在AuthConfig
global.asax 启动时调用的中处理。
AssetRegisterDataLayer.DataAccess.Security.InitializeSecurity();
在我的 DataAccess 层上调用的方法如下所示
public static void InitializeSecurity()
{
WebSecurity.InitializeDatabaseConnection("AssetRegisterDb","UserProfile","UserId","UserName", false);
}
我已经看到当人们使用 MVC4 的开箱即用配置时会发生此问题,其中 Accounts 控制器装饰有[InitializeSimpleMembership]
属性装饰,而不是在应用程序启动时调用 WebSecurity 初始化程序,但这里不是这种情况。任何人都知道为什么除了角色之外所有的 WebSecurity 都有效吗?
非常感谢