问题描述
我正在将 .NET Core 2.1 API 迁移到 .NET Core 3.1,但看起来不支持 Produces File 内容。我遇到了 Internet Explorer 中的 Swagger UI 以文本形式返回二进制内容而不是将其显示为 PDF 或 XLS 文件的问题。
在 2.1 中,我执行了以下操作以使其正常工作:
[HttpPost]
[Route("api/GetPdf")]
[Produces("application/pdf")]
public IActionResult GetPdf([FromBody]JObject data)
{
FileContentResult fr = new FileContentResult(response.Documents.First().DocumentBytes,"application/pdf");
fr.FileDownloadName = fileName;
return fr;
}
并添加到 Statup.cs 配置服务:
c.MapType<FileStream>(() => new Schema { Type = "file",Format = "bytes[]" });
但这在 .NET Core 3.1 中不起作用。有人可以帮助如何通过 Swagger UI 返回 PDF 或 XLS 文件吗?我使用的是 Swashbuckle ASP.NET Core 5.5.1。
解决方法
发现问题,上面的代码确实有效,但由于以下原因在 IE 中不起作用: Swagger UI 不支持 Internet Explorer。来自文档:
浏览器支持
Swagger UI 适用于最新版本的 Chrome、Safari、Firefox 和 Edge。
,您可以试试这个 https://github.com/swagger-api/swagger-ui/issues/4250 这个解决方案看起来是您问题的可行解决方案
嗨,团队, 感谢您通过重现问题快速提出建议。 我也尝试过设置 Content-Type: application/octet-stream 和 Content-Disposition: attachment。 pdf 链接已启用,单击即可下载。 感谢您的确认,Swagger-UI 不支持内联查看 PDF。
建议: 如果可能,请更新需要使用“application/octet-stream”而不是“application/pdf”的规范。 规格链接:https://swagger.io/docs/specification/describing-responses/ 在部分下:返回文件的响应