如何处理 FileResponse return 类型的 Nswag 方法

How to handle FileResponse return type of Nswag methods

我正在使用 Nswag 生成客户端库以使用从 .NET Core 应用程序创建的 API。 目前我正在使用 returns IActionResult 的操作来受益于 return NotFound();return Ok(objectValue); 等方法 如果 return 类型是 IActionresult 从 Nswag 生成的 Csharp 客户端方法具有 return 类型 FileResponse.

如果我将 return 类型更改为某个 class,则相同的 return 类型将从生成的方法中 returned。这将阻止使用我之前提到的好处。

通常 return 类型来自已知的 return 类型,而不是 return 匿名类型。

我已经设法从 FileResponse 读取 Stream 并使用通用方法将其转换为对象 JsonConvert.DeserializeObject<T>(value); 来获得响应,但这似乎需要额外的工作完成。

我是否缺少处理 FileResponse return 类型的内容?是不是从IActionResult改成已知对象比较好?

我设法通过将操作更改为 return ActionResult<ObjectType> 而不是 IActionResult 来解决问题。有关详细信息,请查看 答案。

NSwag 客户端生成器需要额外的注释才能生成准确的客户端代码。 FileResponse is returned for IActionResult - 如您所说。如果操作 returns 更多代码,则 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 将需要添加类型 - 如果没有它,将生成错误的代码。