我的问题是 "Server cannot set status after HTTP headers have been sent."

My issue is "Server cannot set status after HTTP headers have been sent."

我收到一个错误:

((IController)controller).Execute(new RequestContext(new HttpContextWrapper(System.Web.HttpContext.Current), routeData));

An exception of type 'System.Web.HttpException' occurred in System.Web.Mvc.dll but was not handled in user code

附加信息:发送 HTTP headers 后服务器无法设置状态。

完整代码如下。

 private void RedirectToControllers(string control, string action, bool redirectCheck = false)
        {
            var routeData = new RouteData();
            routeData.Values["controller"] = control;
            routeData.Values["action"] = action;
            IController controller = null;
            if (control == Constants.Alerts)
            {
                controller = new AlertsController();
            }
            else if (control == Constants.Account)
            {
                controller = new AccountController();
            }

            if (controller != null)
            {
                if (redirectCheck)
                {
                   ((IController)controller).Execute(new RequestContext(new HttpContextWrapper(System.Web.HttpContext.Current), routeData));
                   // new RedirectResult(Constants.LoginUrl, true);
                }
                else
                {
                    string returnUrl = System.Web.HttpContext.Current.Request.Url.AbsolutePath;
                    if (System.Web.HttpContext.Current.Response.RedirectLocation == null)
                    {
                        System.Web.HttpContext.Current.Response.Redirect(string.Format("/{0}/{1}?" + returnUrl, ControllerHelper.Controller.ACCOUNT, ControllerHelper.Controller.Action.ACCOUNT_LOGIN));
                    }
                }
            }
        }

该错误表明您的应用程序中的某些内容正在更改 Response.Headers 集合,然后试图设置状态代码。这不是在您提供的代码块中完成的,而是在您的应用程序的其他地方发生的。

解决方法是在将请求传递到您的控制器之前清除该请求。您可以通过调用 Response.Clear().

来做到这一点
var httpContext = new HttpContextWrapper(System.Web.HttpContext.Current);
httpContext.Response.Clear();
((IController)controller).Execute(new RequestContext(httpContext, routeData));

您应该检查您的申请,以确保这是正确的做法,因为这将清除您的申请可能需要的任何其他响应设置,以便 运行 正确。