服务器不能在HTTP头发送后设置状态- ELMAH

本文关键字:设置 状态 ELMAH 不能 HTTP 头发 服务器 | 更新日期: 2023-09-27 18:07:51

我一直通过ELMAH收到此错误。即使程序完成了预期的操作,我仍然通过ELMAH收到这个错误,我想知道为什么并修复它。我已经浏览了其他线索,并尝试使用这些建议,但目前为止我所读到的似乎都不起作用。

它的目的是创建一个excel文档,然后将用户重定向到他们刚刚访问的页面。

ActionResult:

 public ActionResult ExportClaimNumberReport(int ClientID, string ClaimNo) {
    ClaimNumberViewModel model = ClaimNumberReport(ClientID, ClaimNo);
    CreateExcelFile.CreateExcelDocument(
        model.ReportData.ToList(), 
        model.ReportDescription + (".xlsx"), 
        HttpContext.ApplicationInstance.Response);
    ViewBag.client = client;
    Response.Buffer = true;
    Response.Redirect(Request.UrlReferrer.ToString());
    if (!Response.IsRequestBeingRedirected) {
       Response.Redirect("/Error/ErrorHandler");
    }
    return RedirectToAction("ErrorHandler", "Error");
}

如果你需要更多的信息,尽管告诉我

服务器不能在HTTP头发送后设置状态- ELMAH

你会得到错误,因为你做了2个重定向。

这里

Response.Redirect(Request.UrlReferrer.ToString());

然后在这里:

return RedirectToAction("ErrorHandler", "Error");

所以第一个重定向将写一个重定向头到响应流,然后第二个将尝试再次这样做,但显然你不能发送http头到浏览器两次,所以它抛出一个异常。然而,用户不会注意到,因为当抛出异常时,浏览器已经被告知重定向到其他地方。

你要做的就是从你的控制器动作调用重定向方法作为返回语句。

所以替换所有这些:

Response.Redirect(Request.UrlReferrer.ToString());
if (!Response.IsRequestBeingRedirected) // this would always be false anyway 
{
   Response.Redirect("/Error/ErrorHandler");
}
return RedirectToAction("ErrorHandler", "Error");
与这个:

return Redirect(Request.UrlReferrer.ToString())

虽然你不清楚为什么要重定向浏览器到参考页面