環境: ASP.NET MVC 4、Visual Studio 2012
MVC 4 テンプレートによって作成された AccountController には、URL スプーフィング攻撃を防ぐ RedirectToLocal ルーチンが含まれています。このルーチンを独自の外部ライブラリ (独自のライブラリ dll プロジェクト内) に移動したいと考えています。調査の結果、これを行う最善の方法は Controller クラスを拡張することであると思われます。私の(失敗した)試みを以下に示します。
私の問題は、 Controller.Redirect と Controller.RedirectToAction が両方とも保護された内部関数であり、「保護レベルのためにアクセスできない」ことです。
外部ライブラリから Redirect または RedirectToAction を呼び出す通常の方法は何ですか?
public static class ControllerExtensionMethods
{
public static ActionResult RedirectToLocal(
this Controller controller,
string redirectUrl)
{
if (controller.Url.IsLocalUrl(redirectUrl)) {
return controller.Redirect(redirectUrl); // error
} else {
return controller.RedirectToAction("Index", "Home"); // error
}
}
}