HttpContext.Response在Visual Studio社区2017中不可靠

时间:2017-12-01 20:58:38

标签: asp.net visual-studio visual-studio-2017

自从我升级到VSC 2017后,我注意到HttpContext.Response函数变得非常棘手,因为预期的错误“线程被中止”很少被正确处理。有时候它会起作用,但它很可能会遇到错误然后退出。

我自己尝试过处理此错误的常用步骤:添加

HttpContext.Current.ApplicationInstance.CompleteRequest();
例如,在Response.Redirect命令的末尾

,但这些命令没有效果。

具体示例:我有一个将GridViews导出到Excel电子表格的应用程序。按照收集和格式化电子表格数据的步骤,将使用以下步骤创建文件。

using (var memoryStream = new MemoryStream())
{
  var resp = System.Web.HttpContext.Current.Response;
  resp.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
  resp.AddHeader("content-disposition", "attachment;  filename=" + FileName + ".xlsx");
  excel.SaveAs(memoryStream);
  memoryStream.WriteTo(resp.OutputStream);
  resp.Flush();
  resp.End();
}

您可以看到响应正在显式结束,但它仍然失败并出现相同的错误。我使用的浏览器并不重要,我使用的是.NET Framework 4.5.2 - 它是我部署支持的服务器中最高的。有没有人有任何想法?

2 个答案:

答案 0 :(得分:2)

在使用不支持HttpContext.Current的Core的Vs 2017中 所以基本上代替他们提供了一些其他的东西

private readonly IHttpContextAccessor _httpContextAccessor;
  _httpContextAccessor.HttpContext.Response.Redirect(redirectUrl);

你可以在VS 2017中这样访问

希望答案对您有所帮助

答案 1 :(得分:0)

在进一步的调查中,我已经确定在所有各种应用程序中,响应与AJAX Update Panel控件不兼容。当我移动LinkBut​​ton时,它触发了我在上面描述的gridview-to-spreadsheet函数的更新面板,它按预期运行。

所以不要在更新面板中触发Response。[无论如何]。