アクションコードが実行された後に、ActionFilterAttributeがリダイレクトされるのはなぜですか?

StackOverflow https://stackoverflow.com/questions/3202191

質問

ログインしていないユーザーをリダイレクトするために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");
   }
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top