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

.NET Core MVC接口在Postman中无法默认保存带XLSX扩展名的Excel文件

问题描述

使用.NET Core MVC开发的DownloadFile接口,通过XLWorkbook生成Excel文件并返回。在Swagger中调用时可正常下载名为“Excel File.xlsx”的文件,但在Postman中调用时,文件默认保存为无扩展名的“Excel File”(归类为所有文件)。已尝试关闭SSL证书验证、使用“发送并下载”选项、将请求改为GET、设置Accept头为“application/vnd.ms-excel”等方法,问题仍未解决,需实现Postman默认保存带.xlsx扩展名的文件。

原代码
[Route("DownloadFile")]
[HttpPost]
public IActionResult DownloadFile(inputdata)
{
   try
    {
       data=//getdata;
        if (data)
        {
            using (XLWorkbook wb = new XLWorkbook())
            {
                wb.Worksheets.Add(data);
                using (MemoryStream stream = new MemoryStream())
                {
                    wb.SaveAs(stream);
                    return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Excel File.xlsx");
                }
            }
        }
        else
            return Ok("No data");
    }
    catch (Exception ex)
    {
       
    }
}
解决方案

Postman对FileResult自动生成的Content-Disposition头解析存在兼容问题,尤其是文件名包含空格时,会导致扩展名丢失。可以手动构造完整的Content-Disposition头,明确用引号包裹文件名,同时保留正确的MIME类型。

修改后的代码如下:

[Route("DownloadFile")]
[HttpPost]
public IActionResult DownloadFile(inputdata)
{
   try
    {
       data=//getdata;
        if (data)
        {
            using (XLWorkbook wb = new XLWorkbook())
            {
                wb.Worksheets.Add(data);
                using (MemoryStream stream = new MemoryStream())
                {
                    wb.SaveAs(stream);
                    var fileContent = stream.ToArray();
                    // 手动添加Content-Disposition头,用引号包裹文件名避免空格解析异常
                    Response.Headers.Add("Content-Disposition", "attachment; filename=\"Excel File.xlsx\"");
                    return File(fileContent, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
                }
            }
        }
        else
            return Ok("No data");
    }
    catch (Exception ex)
    {
        // 补充异常处理逻辑,避免静默失败
        return StatusCode(StatusCodes.Status500InternalServerError, "生成Excel文件时发生错误");
    }
}

关键要点

  • 手动设置Content-Disposition头:用双引号包裹文件名,确保Postman能正确识别完整的文件名(包括扩展名),避免空格导致的解析错误。
  • 使用标准MIME类型:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet是.xlsx文件的官方标准MIME类型,比application/vnd.ms-excel更精准(后者对应旧版.xls格式)。
  • 完善异常处理:添加明确的错误返回逻辑,便于排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:32:58