运行操作代码后,为什么我的ActionFilterAttribute会重定向?

And*_*rew 2 c# redirect actionfilterattribute asp.net-mvc-3 asp.net-mvc-2

我正在尝试使用ActionFilterAttribute重定向未登录的用户.虽然我的重定向工作正在重定向,但它首先调用我的所有ActionResult代码.

关于为什么它不尊重真正的旗帜并结束回应的任何想法?

HttpContext.Current.Response.Redirect("~/Logon",true);
Run Code Online (Sandbox Code Playgroud)

这是我的ActionResult:

[RequireLoggedIn]
public ActionResult Create()
{
    return View(_MessageService.GetAllMessageCategories());
}
Run Code Online (Sandbox Code Playgroud)

这是我的属性:

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();
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

您需要将to设置filterContext.Result为非null以避免下游处理,否则MVC不知道您已经短路.最简单的方法就是:

public override void OnActionExecuting(ActionExecutingContext filterContext) {
  if (Membership.GetUser() == null) {
       filterContext.Result = new RedirectResult("~/Logon");
   }
}
Run Code Online (Sandbox Code Playgroud)