2

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();
       }
    }
}
4

1 に答える 1

5

ダウンストリーム処理を回避するには、をnull以外の値に設定する必要がありfilterContext.Resultます。そうしないと、MVCは短絡したことを認識しません。最も単純なアプローチは次のとおりです。

public override void OnActionExecuting(ActionExecutingContext filterContext) {
  if (Membership.GetUser() == null) {
       filterContext.Result = new RedirectResult("~/Logon");
   }
}
于 2010-07-08T09:26:24.423 に答える