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

时间:2010-07-08 09:25:16

标签: c# asp.net-mvc-3 asp.net-mvc-2 redirect actionfilterattribute

我正在尝试使用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();
       }
    }
}

1 个答案:

答案 0 :(得分:5)

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

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