*在调用“WebSecurity”类的任何其他方法之前,必须调用“WebSecurity.InitializeDatabaseConnection”方法。这个电话 应该放在你的root的_AppStart.cshtml文件中 站点。*
我随机打开和关闭此错误,不确定原因是什么。在我的路线配置中。索引控制器,索引操作是默认操作。这是定义:
[Authorize(Roles = "admin")]
[InitializeSimpleMembership]
public class IndexController : Controller
每次我重新启动应用程序,如果我没有注销,我会收到上述错误。然后我退出并再次登录,错误消失。
为什么会这样?
我该如何解决这个问题?
我正在使用localdb,如果这会有所帮助。
答案 0 :(得分:4)
出现此问题是因为Application_Start()函数仅在第一个用户操作上触发。但是在用户可以执行操作之前触发IndexController。只需从项目中删除[InitializeSimpleMembership],它也给了我很多挫折......
只需将以下代码添加到global.asax
即可private static SimpleMembershipInitializer _initializer;
private static object _initializerLock = new object();
private static bool _isInitialized;
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
}
public class SimpleMembershipInitializer
{
public SimpleMembershipInitializer()
{
using (var context = new UsersContext())
context.UserProfiles.Find(1);
if (!WebSecurity.Initialized)
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
}
当然要确保创建正确的dbContext()并使用与项目匹配的正确InitializeDatabaseConnections属性集。
氪