如何处理 Nswag 方法的 FileResponse 返回类型
Posted
技术标签:
【中文标题】如何处理 Nswag 方法的 FileResponse 返回类型【英文标题】:How to handle FileResponse return type of Nswag methods 【发布时间】:2020-04-11 22:32:16 【问题描述】:我正在使用 Nswag 生成客户端库以使用从 .NET Core 应用程序创建的 API。
目前我正在使用返回 IActionResult
的操作来从 return NotFound();
和 return Ok(objectValue);
等方法中受益
如果返回类型为IActionresult
,则从 Nswag 生成的 Csharp 客户端方法的返回类型为 FileResponse
。
如果我将返回类型更改为某个类,则生成的方法会返回相同的返回类型。这将阻止使用我之前提到的好处。
通常返回类型来自已知的返回类型,从不返回匿名类型。
我已经设法通过从FileResponse
读取Stream
获得响应,并将其转换为具有通用方法JsonConvert.DeserializeObject<T>(value);
的对象,但这似乎是需要完成的额外工作。
我在处理FileResponse
返回类型方面有什么遗漏吗?从IActionResult
改成已知对象会不会更好?
【问题讨论】:
【参考方案1】:我设法通过将操作更改为返回 ActionResult<ObjectType>
而不是 IActionResult
来解决问题。有关更多详细信息,请查看this 答案。
【讨论】:
【参考方案2】:NSwag 客户端生成器需要额外的注释来生成准确的客户端代码。 FileResponse
is returned for IActionResult
- 正如你所说。如果操作返回更多代码,那么 ProducesResponseType
会有所帮助。
使用IActionResult
的示例(返回字符串):
[ProducesResponseType(typeof(string), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[HttpPost("foo")]
public IActionResult FooAction([FromBody] string param)
使用ActionResult<>
的示例:
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[HttpPost("foo")]
public ActionResult<string> FooAction([FromBody] string param)
需要知道 ASP .NET Core 使用 ProblemDetails
(它是可配置的)用于使用内置无参数方法生成的错误代码。如果这些方法是带参数调用的,那么ProducesResponseType
将需要添加类型 - 没有它会生成错误代码。
【讨论】:
以上是关于如何处理 Nswag 方法的 FileResponse 返回类型的主要内容,如果未能解决你的问题,请参考以下文章