【问题标题】:HttpContext.Response unreliable in Visual Studio Community 2017Visual Studio Community 2017 中的 HttpContext.Response 不可靠
【发布时间】:2017-12-01 20:58:38
【问题描述】:

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

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

HttpContext.Current.ApplicationInstance.CompleteRequest();

例如在 Response.Redirect 命令的末尾,但这些没有效果。

具体示例:我有一个将 GridView 导出到 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();
}

您可以看到 Response 正在显式结束,但它仍然失败并出现相同的错误。我使用的是什么浏览器都没有关系,我使用的是 .NET Framework 4.5.2——它是我部署到的服务器支持的最高版本。有人有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    在 Vs 2017 中使用不支持 HttpContext.Current 的核心 所以基本上他们提供了一些其他的东西,而不是他们提供一些其他的东西

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

    你可以在 VS 2017 中这样访问

    希望这个答案对你有帮助

    【讨论】:

    • 不幸的是,这无济于事。我使用的是“标准”.NET,而不是 Core,所以我不能使用这个接口。不过,感谢您的建议。
    【解决方案2】:

    在进一步调查中,我确定 Response 在其所有各种应用程序中都不能很好地与 AJAX 更新面板控件配合使用。当我将触发上述 gridview-to-spreadsheet 功能的 LinkBut​​ton 移出更新面板时,它按预期运行。

    所以不要在更新面板中触发 Response.[whatever]。

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多