【问题标题】:Export csv file in .net web app在 .net Web 应用程序中导出 csv 文件
【发布时间】:2025-11-21 21:45:01
【问题描述】:

我已经将 csv 文件保存为 /Exports/test.csv。我想允许用户点击按钮下载文件。我已经为该代码创建了一个处理程序,如下所示:

<%@ WebHandler Language="C#" Class="Downloadfile" %>

using System;
using System.Web;
using System.Net;

public class Downloadfile : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        HttpContext.Current.Response.ClearHeaders();
        HttpContext.Current.Response.Clear();

        context.Response.ContentType = "text/csv";
        context.Response.AddHeader("Content-Disposition", 
            "attachment; filename=" + context.Request.QueryString["file"]);

        context.Response.End();
    }

    public bool IsReusable
    {
        get
        {
            return true;
        }
    }
}

以上代码下载文件但它是空的。我只想下载 csv 文件及其内容。

【问题讨论】:

  • 所以您的响应标头说响应中有一个文件,但您实际上并没有发送该文件。

标签: c# .net export-to-csv


【解决方案1】:

您需要传输文件。您可以通过使用TransmitFile 方法来做到这一点,或者您可以直接写入context.Response.OutputStream 而不是写入磁盘。

public void ProcessRequest(HttpContext context)
{
    context.Response.ClearHeaders();
    context.Response.Clear();
    context.Response.ContentType = "text/csv";
    context.Response.AddHeader("Content-Disposition", "attachment; filename=" +  context.Request.QueryString["file"]);
    context.Response.TransmitFile("/Exports/test.csv");
    context.Response.End();
}

【讨论】:

  • 它将下载的文件内容显示为:‹ I-.QÈMÌÓQ±Âól š÷Æ 实际是“Test man, Test Woman”
【解决方案2】:

实际上,前几天我不得不做同样的事情,这取决于用户在“接受”标题中传递的内容。我使用了MSDN article on Media Formatters 中的示例,效果很好。

因为我使用的是 MVC 的 WebApi,所以我的和你的有点不同,但基本概念是相同的。

【讨论】:

    最近更新 更多