ActionFilter -在HTTP头被发送后不能重定向

本文关键字:不能 重定向 HTTP ActionFilter | 更新日期: 2023-09-27 18:09:11

我使用以下ActionFilter来检查会话变量是否丢失,如果是这样,它们被重定向到'选择仓库代码屏幕'…就用户而言,它工作得很好……然而,每次我通过ActionFilter重定向时,ELMAH都会报告一个错误(见下面的代码)。

注:这个ActionFilter属性会被放到一个基控制器上,所有其他控制器都会继承这个基控制器。

P.P.S.没有其他的重定向…这个动作过滤器在他们尝试执行的动作之前就启动了……我怎么也弄不明白为什么老是出现这个错误。

public class HasWarehouseCodeExpired : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        Controller controller = filterContext.Controller as Controller;
        if (controller != null)
        {
            if (SessionHelper.WarehouseCode == null)
            {
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "logon", action = "displaywarehouseselection", area = string.Empty }));
            }
        }
        base.OnActionExecuting(filterContext);
    }
}

错误:

包含。HttpException (0x80004005):发送HTTP头后无法重定向。在System.Web.HttpResponse。重定向(String url, Boolean endResponse, Boolean permanent)在System.Web.HttpResponseWrapper。重定向(字符串url,布尔endResponse)在System.Web.Mvc.RedirectToRouteResult。ExecuteResult (ControllerContext上下文)在System.Web.Mvc.ControllerActionInvoker。InvokeActionResult(ControllerContext ControllerContext, ActionResult ActionResult)

ActionFilter -在HTTP头被发送后不能重定向

我仍然不知道为什么会出现错误,但是我通过添加:

filterContext.HttpContext.Server.ClearError ();

一样:

if (SessionHelper.WarehouseCode == null)
{
    filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "logon", action = "displaywarehouseselection", area = string.Empty }));
    filterContext.HttpContext.Server.ClearError();
}