【问题标题】:NSwag default accept response to application/jsonNSwag 默认接受对 application/json 的响应
【发布时间】:2020-09-23 14:51:25
【问题描述】:

我正在使用带有 Asp.Net Core API 的 NSwag。我想将默认接受的响应从 application/octet-stream 更改为 application/json

我尝试将 Response 属性添加到 API 操作以及 OpenApiMimeType 但没有奏效。它仍然设置为application/octet-stream。我该如何更改?

更新: 这是 API 的其中一项操作。

[HttpPost("login")]
public async Task<ActionResult> Login(LoginDto dto, string returnUrl = null)
{
    //... omitted codes for brevity
    
    return Ok();
}

【问题讨论】:

  • 你能分享一下你的web api的控制器方法吗?你使用的那个参数的类型和返回的类型是什么?
  • 我这边按照你的方法做了一个测试demo,效果很好,显示结果是application/json。 Image。你能告诉我你的 Nswag 版本吗?
  • @BrandoZhang 13.7.4.
  • @BrandoZhang 如果有帮助,我正在使用这个模板:github.com/jasontaylordev/CleanArchitecture

标签: asp.net-core swagger nswag


【解决方案1】:

使用 Produce 属性 (https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.producesattribute) 应该可以帮助您实现这一目标。

[HttpPost("login")]
[Produces("application/json")]
public async Task<ActionResult> Login(LoginDto dto, string returnUrl = null)
{
    //... omitted codes for brevity
    
    return Ok();
}

在您的 swagger.json 中,它应该生成如下内容:Swagger.json - 1

另一个原因是因为您使用的是Task&lt;ActionResult&gt;,因此您的 swagger.json 由于这个原因没有生成内容类型。

[HttpPost("login")]
[Produces("application/json")]
public async Task<ActionResult<return something>> Login(LoginDto dto, string returnUrl = null)
{
    //... omitted codes for brevity
    
    return Ok(return something);
}

【讨论】:

  • 我已经在您的第一个样品上使用了 Produce,结果相同。它不会更改响应类型。已经弄清楚如何将其设为application/json。我所做的是返回一个正确的类型,比如Task&lt;ActionResult&lt;string&gt;&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 2017-08-08
  • 2021-10-02
  • 2017-11-21
  • 2022-11-01
相关资源
最近更新 更多