自从我升级到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 - 它是我部署支持的服务器中最高的。有没有人有任何想法?
答案 0 :(得分:2)
在使用不支持HttpContext.Current
的Core的Vs 2017中
所以基本上代替他们提供了一些其他的东西
private readonly IHttpContextAccessor _httpContextAccessor;
_httpContextAccessor.HttpContext.Response.Redirect(redirectUrl);
你可以在VS 2017中这样访问
希望答案对您有所帮助
答案 1 :(得分:0)
在进一步的调查中,我已经确定在所有各种应用程序中,响应与AJAX Update Panel控件不兼容。当我移动LinkButton时,它触发了我在上面描述的gridview-to-spreadsheet函数的更新面板,它按预期运行。
所以不要在更新面板中触发Response。[无论如何]。