繁体   English   中英

ActionFilter - 发送 HTTP 标头后无法重定向

[英]ActionFilter - Cannot redirect after HTTP headers have been sent

我正在使用以下 ActionFilter 来检查会话变量是否已丢失,如果丢失,它们将被重定向到“选择仓库代码屏幕”......就用户而言,它工作正常......但是 ELMAH每次我通过 ActionFilter 重定向时都会报告错误(见下面的代码)。

PS 这个 ActionFilter 属性然后放在一个基本控制器上,所有其他控制器都继承它。

PPS 没有其他重定向正在进行...此操作过滤器在他们尝试执行的操作之前触发...我一生都无法弄清楚为什么我一直收到此错误。

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);
    }
}

错误:

System.Web.HttpException (0x80004005):发送 HTTP 标头后无法重定向。 在 System.Web.HttpResponse.Redirect(String url, Boolean endResponse, Boolean Permanent) 在 System.Web.HttpResponseWrapper.Redirect(String url, Boolean endResponse) 在 System.Web.Mvc.RedirectToRouteResult.ExecuteResult(ControllerContext context) 在 System. Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)

好吧,我仍然不知道为什么会发生错误,但是我通过添加以下内容来停止错误:

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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM