WebSecurityオブジェクトは、AccountController.csファイルで既に生成されているもの以外の場所では動作させることができません。アカウントコントローラの上部には[InitializeSimpleMembership]
属性が設定されています。ログイン機能は、例えばWebSecurity.Login(...)
を呼び出すことについて不平を言うことはありません。 IはAccountControllerの子アクションを追加:"WebSecurity"クラスの他のメソッドを呼び出す前に "WebSecurity.InitializeDatabaseConnection"メソッドを呼び出す必要があります
[ChildActionOnly]
[AllowAnonymous]
public ActionResult NavBar()
{
NavBarViewModel viewModel = new NavBarViewModel();
viewModel.LinkItems = new List<NavBarLinkItem>();
if (Request.IsAuthenticated)
{
SimpleRoleProvider roleProvider = new SimpleRoleProvider();
if (roleProvider.IsUserInRole(User.Identity.Name, "User"))
{
viewModel.LinkItems.Add(new NavBarLinkItem()
{ Title = "Create Project", Action = "Create", Controller = "Project" });
}
}
viewModel.LinkItems.Add(new NavBarLinkItem() { Title="Help", Action="Index", Controller="Help" });
return PartialView("_NavBar", viewModel);
}
左そのまま、 "IF(roleProvider.IsUserInRole(User.Identity.Name、 "ユーザー"))" は、対象のエラーメッセージをライン上のコードがクラッシュ。だから私はInitialzeSimpleMembershipAttribute.csファイルに移動して/私の関数の先頭に次の行をコピー&ペースト:
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
...とWebSecurity.InitializeDatabaseConnectionは一度だけ呼ばれるべきエラーメッセージが表示されます。コントローラー定義の先頭にこの関数を既に呼び出すべき属性があるので(これはうまくいくようです)、これは意味があります。だから、安全のために、私はへの呼び出し上記の変更:
if (!WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId",
"UserName", autoCreateTables: true);
}
...とWebSecurity.InitializeDatabaseConnectionは何とか何とか何とか前に呼び出されるべきであることを、元のエラーメッセージを、取り戻します。この狂気への洞察は大いに評価されるでしょう。
これは本当に必要なほど明確ではありません。私はリンクを見ましたが、私は役割を作成しようとしていないので、私がやっていることとは関係ありません(私は思いますか?)。 私は同じ問題を抱えていますが、「これを2回呼び出すことはできません」というメッセージが表示されますが、「2番目」のメッセージを取ると「電話する必要があります...」というメッセージが表示されます。 「あなたが呼び出す必要があります...」というメッセージでクラッシュするのは、 if(OAuthWebSecurity.Login(result.Provider、result.ProviderUserId、createPersistentCookie:false)) アイデア? –