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

时间:2016-09-28 16:28:56

标签: c# asp.net-mvc-4 redirect

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

P.S。然后将此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);
    }
}

错误:

  

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)

1 个答案:

答案 0 :(得分:1)

我仍然不知道错误发生的原因,但是我通过添加以下内容来阻止错误:

  

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