私はMVCにはかなり新しいですが、どのリダイレクト...がWebFormsで使用されている標準リダイレクト、つまり標準のResponse.Redirect()
を置き換えるのか正確にはわかりません
たとえば、いくつかのシナリオで他のページにリダイレクトする必要があります。
1)ユーザーがログアウトするとき(アクションのフォームサインアウト)ログインページにリダイレクトしたい。
2)Initialize
などのコントローラーまたはベースコントローラーイベントで、別のページにリダイレクトしたい(AbsoluteRootUrl + Controller + Action)
場合によっては複数のリダイレクトが呼び出され、エラーが発生するようです。これは、ページがすでにリダイレクトされているという事実と関係がありますか?現在のリクエストをキャンセルしてリダイレクトする方法は?
更新:
この質問に対する答え( System.Web.Mvc.Controller Initialize )は、Initialize
を使用してはならず、OnActionExecuting
を使用する必要があることを示していますか?
Initialize
を使用すべきでない理由、またはOnAuthorization
が優れたオプションではない理由に関するコメントはありますか?
詳細:
このブログ投稿( http://blog.wekeroad.com/blog/aspnet-mvc-securing-your-controller-actions/ )は、OnActionExecuting
が認証に有用であることを示しています(上記のリンクに示されています)これをベースコントローラークラスのイベントに追加すると、すべてのページがMVCでアクションを実行するので問題ありませんので、大きな違いはなく、リダイレクトする機能が簡単になるはずです。これは理にかなっていますが、このイベントの前にイベントで何かを行うことができ、それらのイベントが何のためにあるのか疑問に思うことも私には理にかなっています。 OnActionExecuting
を試してみます。
1)ユーザーがログアウトしたとき(アクションでフォームサインアウト)ログインページにリダイレクトしたい。
public ActionResult Logout() {
//log out the user
return RedirectToAction("Login");
}
2)イニシャライズなどのコントローラーまたはベースコントローラーイベントで、別のページにリダイレクトしたい(AbsoluteRootUrl + Controller + Action)
コントローラーの初期化からリダイレクトしたいのはなぜですか?
ルーティングエンジンは、着信したリクエストを自動的に処理します。コントローラーのインデックスアクションからリダイレクトする場合は、次のようにします。
public ActionResult Index() {
return RedirectToAction("whateverAction", "whateverController");
}
1)ログインページ/ログインページからリダイレクトするには、Redirect()メソッドを使用しないでください。 FormsAuthentication.RedirectToLoginPage()
とFormsAuthentication.RedirectFromLoginPage()
を使用してください!
2)通常のシナリオではRedirectToAction( "action"、 "controller")を使用するだけです。Initializeメソッドの内側にリダイレクトしたいですか?どうして?なぜあなたはこれをしたいのかわかりません。ほとんどの場合、あなたはあなたのアプローチを確認する必要があります。代わりに、コントローラーまたはメソッドの[Authorize]
属性:)
PD: Initialiseメソッドにセキュリティチェックがあり、ユーザーがこのメソッドにアクセスできない場合、いくつかのことができます:a)
Response.StatusCode = 403;
Response.End();
これにより、ユーザーはログインページに戻ります。彼をカスタムの場所に送りたい場合は、次のようなことができます(cautios:pseudocode)
Response.Redirect(Url.Action("action", "controller"));
完全なURLを指定する必要はありません。これで十分でしょう。完全なURLを完全に主張する場合:
Response.Redirect(new Uri(Request.Url, Url.Action("action", "controller")).ToString());
RedirectToAction("actionName", "controllerName");
他のオーバーロードもありますので、チェックしてください!
また、新規で T4MVC を使用していない場合は、使用することをお勧めします。
アクション、コントローラー、ビューなどのインテリジェンスを提供します(マジックストリングは不要です)