【问题标题】:Why does my ActionFilterAttribute redirect after the action code is run?为什么我的 ActionFilterAttribute 在操作代码运行后重定向?
【发布时间】:2011-03-13 05:53:02
【问题描述】:

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

【问题讨论】:

  • @Madi - 不太可能;另一个问题是常规 aspx,不是 MVC,也不是动作过滤器。有很大的不同。
  • 哦,你是对的,我的错。 =)

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多