我正在使用swagger用户界面,我有这样的动作在我的控制器:
[HttpGet("{id}")]
[AllowAnonymous]
[ProducesResponseType(typeof(PublicDto), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(PrivateDto), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(string), StatusCodes.Status403Forbidden)]
[ProducesResponseType(typeof(string), StatusCodes.Status404NotFound)]
public async Task<IActionResult> GetUser(string id)
{
try
{
...
if (...)
{
var dto = _mapper.Map<PrivateDto>(user);
return Ok(dto);
}
else
{
var dto = _mapper.Map<PublicDto>(user);
return Ok(dto);
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Error inside action");
return StatusCode(500, "Internal server error");
}
}
问题是,在我的界面页面上,我只能看到一个在响应区,并得到了只有一个方案。有没有办法有一个以上的对象为一个状态代码的响应?
1条答案
按热度按时间bvn4nwqk1#
这不是一个bug,这是开放API规范的一个限制,SB是建立在这个规范之上的。具体来说,每个响应代码只能有一个响应对象。请参见https://spec.openapis.org/oas/v3.1.0#responses-object