函数返回文件时加载 API 定义失败

Posted

技术标签:

【中文标题】函数返回文件时加载 API 定义失败【英文标题】:Failed to load API definition when a function returns a file 【发布时间】:2021-08-28 07:48:42 【问题描述】:

我的 API 项目使用 ASP.NET Core (.NET5)。一切正常,Swagger 页面显示所有 API。现在,在控制器中,我想添加一个函数来导出 Excel 文件。控制器中的代码是这样的:

[HttpGet]
public IActionResult DownloadExcel()

    byte[] reportBytes;

    using (var package = _utils.CreateCommentPackage())
    
        reportBytes = package.GetAsByteArray();
    

    return File(reportBytes, XlsxContentType, 
        $"Comments-DateTime.Now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture).xlsx");

非常简单,但没有创建 Swagger 定义。当我打开 Swagger 页面时,我看到了

如果我删除此功能,Swagger 将再次工作。

【问题讨论】:

Swagger 不理解 IActionResult。 ***.com/a/53107899/14072498 【参考方案1】:

你需要添加一个路由,修改你的代码如下;

[HttpGet]
[Route("api/DownloadExcel")]
public IActionResult DownloadExcel()

    byte[] reportBytes;

    using (var package = _utils.CreateCommentPackage())
    
        reportBytes = package.GetAsByteArray();
    

    return File(reportBytes, XlsxContentType, 
        $"Comments-DateTime.Now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture).xlsx");

【讨论】:

以上是关于函数返回文件时加载 API 定义失败的主要内容,如果未能解决你的问题,请参考以下文章

构造函数的返回类型定义 - 如何修复此标头

单击时的DataTable锚事件不起作用,并返回加载资源失败

MFC CDialog::Create 失败

Next Auth useSession 在初始页面加载时返回未定义

回炉重造之重读Windows核心编程-001-错误处理

Revit API 加载族并生成实例图元