だから、私は MVC4 アプリケーションを持っており、デフォルトのログインおよび登録システムを使用しています。ホームページで、ユーザーの役割に基づいてメッセージをリダイレクトまたは変更したいと考えています。これが私がコントローラーに持っているものです:
public ActionResult Index()
{
if (Roles.GetRolesForUser().Contains("Admin"))
ViewBag.Message = "Click on a link to get started.";
else if (Roles.GetRolesForUser().Contains("Authorized"))
ViewBag.Message = "Click on Organizations or Interfaces to get started.";
else if (Roles.GetRolesForUser().Contains("Unauthorized"))
ViewBag.Message = "An administrator must activate your account before you can use this tool.";
else
return RedirectToAction("Login", "Account");
return View();
}
通常、これは問題なく機能しますが、ログイン中にアプリケーションを再起動し、コードを変更すると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示されます。そして、明らかにまだ存在しない役割を指しています。
あまりにも多くの検索の後、同じ問題を抱えている人を見つけました。そこで提案された解決策を試し、Roles.GetRolesForUser().Contains のすべてのインスタンスを HttpContext.User.IsInRole に置き換えましたが、「SQL への接続を確立中にネットワーク関連またはインスタンス固有のエラーが発生しました」というエラーが発生しました。サーバー。サーバーが見つからなかったか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。(プロバイダ: SQL ネットワーク インターフェイス、エラー: 26 - 指定されたサーバー/インスタンスの検索エラー)"
さらに多くの検索を行った後、これを見つけました。これは、最初にリダイレクトが必要なため、どちらの試行も機能しないことを示しています。とはいえ、彼はどうやら別のことを話しているようですが、かなり似ているように見えます.
同じコードを含む Index3 にリダイレクトされた Index2 に Index をリダイレクトしようとしましたが、同じエラーが発生しました。クリック可能なリンクを Index から Index2 から Index3 に取得しようとしましたが、同じエラーが発生しました。WebSecurity.Logout(); を配置してログオフを強制しようとしました。エラーの原因となるコード行の直前に、別のエラーが表示されます。「「WebSecurity」クラスの他のメソッドを呼び出す前に、「WebSecurity.InitializeDatabaseConnection」メソッドを呼び出す必要があります。この呼び出しは、_AppStartサイトのルートにある .cshtml ファイル。」しかし、組み込みの logoff メソッドはそれを呼び出しているようには見えません。別のことが起こっています。
@using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm" })) {
@Html.AntiForgeryToken()
<a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
}
クリックすると、すぐに WebSecurity.Logout(); が呼び出されます。
だから、それが私ができることの限界についてです。アプリケーションを起動するたびにログオフを強制する方法が必要だと思います。また、ログオン後にインデックス ページをほとんど回避できるため、インデックス ページにバインドされていても問題ありません。または、ログオンしているユーザーを認識させる方法があれば、さらに良いでしょう。
それを回避するために、最初は問題のあるコードをすべてコメントアウトし、再起動し、[ログオフ] をクリックしてから、コメントを外して再起動しました。その後、ブラウザで Cookie を削除すると問題が解決することがわかりました。私はまだそれを毎回する必要はありません。解決策が見つからない場合は、ログイン ページに移動するログオフ リンクをクリックするようユーザーに強制するだけです。