ここでは推奨されない、ベースコントローラーを使用せずにコントローラーの保護されたメソッドを使用する便利なメソッドを実装する方法はありますか?たとえば、クエリ文字列パラメータが渡さActionResult
れたかどうかに基づいてを返したいとします。returnUrl
私が本当に欲しいのは、次のような拡張メソッドです。
public static class ControllerExtensions {
public static ActionResult RedirectReturnUrlOrDefaultAction(this Controller thisController, string returnUrl, string defaultAction) {
if (!string.IsNullOrEmpty(returnUrl) && thisController.Url.IsLocalUrl(returnUrl)) {
return thisController.Redirect(returnUrl);
}
else {
return thisController.RedirectToAction(defaultAction);
}
}
}
それで私はこれを言うことができました:
return this.RedirectReturnUrlOrDefaultAction(Request.QueryString["returnUrl"], "Index");
...内からController
。しかしもちろん、その拡張メソッドはコンパイルされません。なぜなら、何らかの理由で、次のようなメソッドがコンパイルされるからですRedirect
(ちなみに、protected internal
なぜそれらはコンパイルprotected internal
されますか?)
ベースコントローラーを使用せずにこれを行うことができる適切な方法はありますか?そうでない場合、これが実際にベースコントローラーを使用する理由の1つでしょうか、それとも私の設計に欠陥がありますか?