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

关于为什么它不尊重真实旗帜并结束响应有什么想法吗?

HttpContext.Current.Response.Redirect("~/Logon",true);

这是我的操作结果:

[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为非空值以避免下游处理,否则MVC不知道您已短路。最简单的方法就是:

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

@Madi - 不太可能;另一个问题是常规的 aspx,而不是 MVC,也不是动作过滤器。存在很大差异。

哦,你是对的,我的错。=)