1

*您必须在调用“WebSecurity”类的任何其他方法之前调用“WebSecurity.InitializeDatabaseConnection”方法。此调用应放置在站点根目录下的 _AppStart.cshtml 文件中。*

我随机出现这个错误,打开和关闭,不确定原因是什么。在我的路线配置中。索引控制器,索引动作是默认的。这是定义:

[Authorize(Roles = "admin")]
[InitializeSimpleMembership]
public class IndexController : Controller

每次我重新启动应用程序时,如果我没有注销,我就会收到上述错误。然后我注销并再次登录,错误消失了。

为什么会这样?

我该如何解决这个问题?

如果有帮助,我正在使用 localdb。

4

1 回答 1

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 属性。

于 2013-07-25T12:17:12.097 回答