发送HTTP标头后,服务器无法附加标头

下面显示的是我创建CSV文件后的代码,我想下载文件,所以我使用下面的代码。 但它的抛出错误“服务器无法在HTTP标头发送后附加标头”在“Response.AddHeader(”内容配置“,”附件;文件名=“+ fileCSV +”\“”);“地点。它的下载但浏览器不会重定向到同一页面。

string[] header = { "Error Occurred On", "Controller Name", "Action Name", "Exception Occurred", "Stack Trace Description", "InnerException Occurred", "Stack Trace InnerException Occurred " }; 

代码:

 DataTable dt = new DataTable(); for (int e = 0; e < header.Length; e++) { dt.Columns.Add(header[e], typeof(string)); } StringBuilder sb = new StringBuilder(); IEnumerable columnNames = dt.Columns.Cast().Select(column => column.ColumnName); sb.AppendLine(string.Join(",", columnNames)); dt.DefaultView.RowFilter = "[Exception Occurred] LIKE '%" + keyword + "%'"; DataTable dtFilter = new DataTable(); dtFilter = dt.DefaultView.ToTable(); foreach (DataRow row in dtFilter.Rows) { IEnumerable fields = row.ItemArray.Select(field => field.ToString()); sb.AppendLine(string.Join(",", fields)); } System.IO.File.WriteAllText(fileCSV, sb.ToString()); byte[] bytes = Encoding.ASCII.GetBytes(sb.ToString()); if (bytes != null) { Response.Clear(); Response.ContentType = "text/csv"; //Response.AddHeader("Content-Length", bytes.Length.ToString()); Response.AddHeader("Content-disposition", "attachment; filename=" + fileCSV); Response.BinaryWrite(bytes); Response.Flush(); Response.End(); } 

下载文件后无法重定向,您尝试执行2个操作,您只能执行第一个操作。

我建议您在新的(弹出窗口)窗口中下载文件,并根据需要重定向主页面。

编辑:-

您可以使用window.open.打开文件下载操作来强制下载window.open.

例:-

 Download File  

在HTTP中,每个请求都有一个响应。 所以这个错误意味着你已经发送了一些东西来回应。

不确定您是否仍在寻找答案,而不是Response.Flush和Response.End,请尝试HttpContext.ApplicatiohInstance.CompleteRequest()。 在尝试直接写入请求流时,它解决了很多我的问题。