在asp.net中使用csv文件进行响应

时间:2011-09-14 13:57:07

标签: asp.net file csv response

我正在尝试从文本框中创建一个csv文件,然后将其发送给用户。到目前为止,这是我的代码:

Response.Clear();
            Response.ContentType = "text/csv";
            Response.AppendHeader("Content-Disposition",
                string.Format("attachment; filename={0}", DateTime.Now));

            Response.Write(TextBox_Data.Text);
            Context.Response.End();

发送的是一个空的xml文件,我之前从未尝试过使用文件进行响应,我想知道为什么会这样做?

我也尝试过以下哪些不起作用:

var writer = File.CreateText("C:\\file.csv");
            writer.WriteLine(TextBox_Data.Text);

            Context.Response.Clear();
            Context.Response.AppendHeader("content-disposition", "attachment; filename=" + DateTime.Now + ".csv");
            Context.Response.ContentType = "text/csv";
            Context.Response.Write("C:\\file.csv");
            Context.Response.Flush();
            Context.Response.End();

如果您有答案,请告诉我们。)

2 个答案:

答案 0 :(得分:7)

以下代码对我有用。您可能只是缺少文件扩展名。

Response.Clear();
Response.ContentType = "text/csv";
Response.AppendHeader("Content-Disposition",
                string.Format("attachment; filename={0}.csv", DateTime.Now));
Response.Write(TextBox_Data.Text);
Context.Response.End();

答案 1 :(得分:2)

只是joshb关于使用Response.End()的答案的补充:

对于非错误情况,MSDN not recommend使用Response.End(),在某些情况下,它实际上会导致客户端丢失一些数据。

在我的情况下,有时候下载的csv会丢失最后一行的最后一个字节,所以我删除了Response.End()并使用了

    HttpContext.Current.ApplicationInstance.CompleteRequest()
相反,我不得不重写页面的Render(HtmlTextWriter writer)方法,不在请求上写任何内容,因为csv已经写入了。

public class PageBase : Page
{
    private bool performRegularPageRender = true;

    protected override void Render(HtmlTextWriter writer)
    {
        if (performRegularPageRender)
            base.Render(writer);
    }

    public void SkipRegularPageRendering()
    {
        performRegularPageRender = false;
    }
}

更多信息/点数: msdn blog; Is Response.End() considered harmful?; PostBack and Render Solutions? Overrides