Swashbuckle 拒绝显示 HTTP 500 的响应示例

Swashbuckle refuses to show response example for HTTP 500

我在 .Net Core 3.1 中将 Swashbuckle 用于 Web api 应用程序。我想要各种响应代码的响应示例。除了 HTTP 500,我可以使它们全部工作。这些是特定方法的属性:

    [SwaggerRequestExample(typeof(GroupInfoRequest), typeof(GroupInfoRequestExample))]
    [SwaggerResponseExample(Status200OK, typeof(GroupInfo200Example))]
    [SwaggerResponseExample(Status400BadRequest, typeof(GroupInfo400Example))]
    [SwaggerResponseExample(Status403Forbidden, typeof(GroupInfo403Example))]
    [SwaggerResponseExample(Status404NotFound, typeof(GroupInfo404Example))]
    [SwaggerResponseExample(Status500InternalServerError, typeof(GroupInfo500Example))]
    [ProducesResponseType(Status200OK)]
    [ProducesResponseType(Status400BadRequest)]
    [ProducesResponseType(Status403Forbidden)]
    [ProducesResponseType(Status404NotFound)]
    [ProducesResponseType(Status500InternalServerError)]

除了 GroupInfo500Example 之外,我可以让它们全部呈现。该应用程序仅 return 发送 HTTP 500 以指示其他异常处理程序未捕获的内部异常。它旨在 return 一个主体,其中包含一个 GUID,可以传递给我们的支持组织,以帮助他们在应用程序日志中查找异常。我无法让示例呈现任何 5xx 错误。如果我将它更改为另一个状态代码,它会呈现,因此特别是 5xx 结果不会呈现。我检查了生成的 openapi json,它不是作为生成的 JSON 的一部分生成的。是否有过滤器阻止 5xx 响应文档显示响应示例?

终于想通了。我缺少 'ProducesResponseType' 属性的一部分。它需要具有 return 类型以及 HTTP 状态代码。这有效:

    [ProducesResponseType(typeof(ADServiceOperationMultipleResult<GroupActionRequestForUsers, UserQuery>), Status200OK)]
    [ProducesResponseType(typeof(ADServiceOperationMultipleResult<GroupActionRequestForUsers, UserQuery>), Status400BadRequest)]
    [ProducesResponseType(typeof(ADServiceOperationMultipleResult<GroupActionRequestForUsers, UserQuery>), Status403Forbidden)]
    [ProducesResponseType(typeof(ADServiceOperationMultipleResult<GroupActionRequestForUsers, UserQuery>), Status404NotFound)]
    [ProducesResponseType(typeof(ADServiceOperationMultipleResult<GroupActionRequestForUsers, UserQuery>), Status422UnprocessableEntity)]
    [ProducesResponseType(typeof(ADServiceOperationMultipleResult<GroupActionRequestForUsers, UserQuery>), Status500InternalServerError)]

奇怪的是,一些状态代码包括没有它的示例,但现在只要我在属性中包含方法 return 类型,示例就会显示一致。