swagger 相同状态代码200OK的多个生产响应类型

aiazj4mn  于 2023-02-04  发布在  其他
关注(0)|答案(1)|浏览(145)

我正在使用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");
    }
}

问题是,在我的界面页面上,我只能看到一个在响应区,并得到了只有一个方案。有没有办法有一个以上的对象为一个状态代码的响应?

bvn4nwqk

bvn4nwqk1#

这不是一个bug,这是开放API规范的一个限制,SB是建立在这个规范之上的。具体来说,每个响应代码只能有一个响应对象。请参见https://spec.openapis.org/oas/v3.1.0#responses-object

相关问题