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 プロパティが設定されていることを確認してください。

KR

于 2013-07-25T12:17:12.097 に答える