アクションコードが実行された後に、ActionFilterAttributeがリダイレクトされるのはなぜですか?
-
12-09-2020 - |
質問
ログインしていないユーザーをリダイレクトするためにActionFilterAttributeを使用しようとしています。リダイレクトはリダイレクトされていますが、最初にすべてのActionResultコードを呼び出します。
なぜそれが本当の旗を尊重し、応答を終了していないのかについてのアイデアは?
HttpContext.Current.Response.Redirect("~/Logon",true);
.
これは私のActionResult:
[RequireLoggedIn]
public ActionResult Create()
{
return View(_MessageService.GetAllMessageCategories());
}
.
これは私の属性です:
public class RequireLoggedIn : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (Membership.GetUser() == null)
{
//Not logged in so back to the logon page.
HttpContext.Current.Response.Redirect("~/Logon",true);
HttpContext.Current.Response.End();
}
}
}
. 解決
ダウンストリーム処理を避けるためにfilterContext.Result
をNULL以外のものに設定する必要があります。それ以外の場合は、MVCが短絡していることを知りません。最も簡単なアプローチは単なる:
public override void OnActionExecuting(ActionExecutingContext filterContext) {
if (Membership.GetUser() == null) {
filterContext.Result = new RedirectResult("~/Logon");
}
}
. 所属していません StackOverflow