pdf - .NET Core pdf下载器 "No output formatter was found for content types '应用程序/pdf'...”

标签 pdf .net-core asp.net-core-webapi

我正在创建一个 .NET Core 3.1 Web API 方法来下载给定文件名的 pdf。此方法在使用 NSwag 生成客户端代码的团队之间共享。

我最近将 Produces 属性从 json 更改为 Produces("Application/pdf"),需要进行此更改,以便其他团队可以生成有效的客户端代码。但是,自从此更改以来,我无法通过此方法下载任何文件。下载文档的请求返回 406 错误(在 Postman 中),并且以下错误将记录到服务器事件查看器中。

找不到内容类型“application/pdf、application/pdf”的输出格式化程序来写入响应。

将生成的内容类型恢复为“application/json”确实允许下载文档,但如上所述,该值必须为 pdf。

如有任何建议,我们将不胜感激。

方法:


[HttpGet("{*filePath}")]
[ProducesResponseType(typeof(FileStreamResult), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[Produces("Application/pdf")]
public async Task<ActionResult> GetDocument(string fileName) {

    RolesRequiredHttpContextExtensions.ValidateAppRole(HttpContext, _RequiredScopes);

    var memoryStream = new MemoryStream();

    var memoryStream = new MemoryStream();

    using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: true)) {
        stream.CopyTo(memoryStream);
    }
    memoryStream.Seek(offset: 0, SeekOrigin.Begin);

    return new FileStreamResult(memoryStream, "Application/pdf");
}

最佳答案

我刚刚遇到了同样的错误,经过一番调查,我发现异常的原因确实是在模型绑定(bind)错误中。您已经在答案中写到了这一点,但经过仔细检查,很明显,原因与绑定(bind)本身无关,而是与响应正文有关。

由于您指定了[Produces("application/pdf")],框架假定此内容类型是此操作的唯一可能,但是当引发异常时,您会得到application/json 包含错误描述。

因此,要使其适用于“快乐路径”和异常,您可以指定多种响应类型:

[Produces("application/pdf", "application/json")]
public async Task<ActionResult> GetDocument(string fileName) 
{
...
}

关于pdf - .NET Core pdf下载器 "No output formatter was found for content types '应用程序/pdf'...”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63792713/

相关文章:

.net - Docker-compose 与 .NET Core 无法访问

c# - AspNet 核心 web Api ApiControllerAttribute 的使用

Android:PrintedPdfDocument Resolution 无效

java - Itextpdf停止正确转换pdf

asp.net - 如何在环境变量中覆盖 appsettings.json 中基于数组的设置?

c# - 解析值 : . 路径 '' 时遇到错误意外字符,第 1 行,位置 1

arrays - 复杂对象的 json 数组在发布时始终为 null

vba - 从 Excelsheet 以横向格式导出 PDF,无空格

perl - 如何使用 PDF::API2 通过 Perl 将多个 pdf 合并为一个?

.net-core - Entity Framework 核心句柄被删除全局级别的列