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

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

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