我的问题是 "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));
您应该检查您的申请,以确保这是正确的做法,因为这将清除您的申请可能需要的任何其他响应设置,以便 运行 正确。
我收到一个错误:
((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));
您应该检查您的申请,以确保这是正确的做法,因为这将清除您的申请可能需要的任何其他响应设置,以便 运行 正确。