发送HTTP标头后,服务器无法设置状态 - ELMAH

时间:2015-08-14 09:56:28

标签: c# asp.net-mvc error-handling

我一直通过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");
}

如果您需要更多信息,请告诉我

1 个答案:

答案 0 :(得分:3)

您将收到错误,因为您正在进行2次重定向。

来到这里

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

然后再来一次:

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

因此,第一个重定向会将重定向标头写入响应流,然后第二个重定向将尝试再次执行,但显然您无法将http标头发送到浏览器两次,因此会引发异常。然而,用户不会注意到,因为在抛出异常时,浏览器已经被告知要在其他地方重定向。

您要做的只是将Redirect方法作为控制器操作的return语句。

所以替换所有这些:

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

虽然您将浏览器重定向回引用页面的原因尚不清楚。