You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改C# WebAPI中FileStreamResult下载文件的文件名?

修改CSV下载文件名的解决方案

要修改前端下载的文件名,只需在返回FileStreamResult时设置FileDownloadName属性即可,同时可以优化控制器的返回逻辑(原代码用Ok()包裹FileStreamResult没必要,直接返回结果更规范)。

修改后的代码示例

[HttpGet("GetCSV")]
public async Task<ActionResult<FileStreamResult>> GetCSV()
{
    var ret = getfile();
    return ret; // 直接返回FileStreamResult,无需用Ok包裹
}

public FileStreamResult getfile()
{
    MemoryStream stream = new MemoryStream();
    try
    {
        // some list
        string csv = CsvSerializer.SerializeToCsv(list);
        stream = GenerateStreamFromString(csv);
        // 设置自定义下载文件名
        return new FileStreamResult(stream, "text/csv") 
        { 
            FileDownloadName = "我的自定义CSV文件.csv" 
        };
    }
    finally
    {
        stream.Flush();
    }
}

public MemoryStream GenerateStreamFromString(string s)
{
    byte[] byteArray = Encoding.ASCII.GetBytes(s);
    MemoryStream stream = new MemoryStream(byteArray);
    return stream;
}

简化写法(推荐)

也可以直接使用ControllerBase.File方法,一步完成流、MIME类型和文件名的设置:

public FileStreamResult getfile()
{
    // some list
    string csv = CsvSerializer.SerializeToCsv(list);
    var stream = GenerateStreamFromString(csv);
    // 直接通过File方法指定文件名
    return File(stream, "text/csv", "我的自定义CSV文件.csv");
}

原理说明

设置FileDownloadName后,接口响应会自动带上Content-Disposition响应头,格式为:

Content-Disposition: attachment; filename="我的自定义CSV文件.csv"

前端浏览器会读取这个头里的filename值,以此作为下载文件的名称,替代默认的接口名GetCSV。

内容的提问来源于stack exchange,提问作者Venkat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 16:20:00