如何处理 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 返回类型的主要内容,如果未能解决你的问题,请参考以下文章

kotlin 不确定如何处理插入方法的返回类型

在 Sequelize 中使用 .create(...) 方法时如何处理错误

如何处理java中的方法超时? [复制]

房间错误:不确定如何处理插入方法的返回类型

如何处理尝试捕获异常android

如何处理显示 ProgressDialog 的方向变化?