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

时间:2014-09-15 11:27:02

标签: c# asp.net-mvc model-view-controller

下面显示的是我创建CSV文件后的代码,我想下载文件,所以我使用下面的代码。但它的投掷错误" HTTP报头发送后,服务器无法附加标头" at" Response.AddHeader(" Content-disposition"," attachment; filename =" + 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<string> columnNames = dt.Columns.Cast<DataColumn>().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<string> 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();
}

4 个答案:

答案 0 :(得分:2)

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

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

修改: -

您可以使用window.open.

打开文件下载操作来强制下载

实施例: -

<a href="Action/RedirectPage" data-file="Action/DownloadCVS" class="file-download">Download File</a>

<script>
  $(function() {
      $('a.file-download').click(function() {
         window.open($(this).data('file'));
      }); 
  });
</script>

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

几分钟前,我在下载文件时遇到了同样的问题。我想分享对我有用的东西。

最重要的是添加:

Response.ClearHeaders();

开始动作的结果。

而且,老实说,我在这里https://www.codeproject.com/Questions/1038819/How-to-resolve-this-error-Server-cannot-append-hea

读了它