【问题标题】:Microsoft.AspNetCore.Mvc.Api.Analyzers - Is there a configuration for detecting global "ProducesResponseType" attributes?Microsoft.AspNetCore.Mvc.Api.Analyzers - 是否有用于检测全局“ProducesResponseType”属性的配置?
【发布时间】:2021-03-25 19:02:53
【问题描述】:

在 .NET Core 3.1 应用程序中启用 Microsoft.AspNetCore.Mvc.Api.Analyzers 并在产生这些类型的返回码的操作方法之上应用以下过滤器后,它会按预期工作:它会产生警告如果缺少响应代码属性,如果没有,它们就会消失。

        [HttpGet("{id}")]
        [AuthorizeAllRoles]
        [ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(string))]
        [ProducesResponseType(StatusCodes.Status404NotFound)]
        [ProducesResponseType(StatusCodes.Status200OK)]
        public async Task<IActionResult> GetSomething(string id)
        {
            //.. does stuff and returns other action types
            await Task.Run(() =>{Thread.Sleep(1000);});
                
            return BadRequest("my error message");
        }

但是带有错误消息的 BadRequest 响应对项目中的所有控制器来说都是通用的,所以我将其从控制器中删除将其重新应用为全局过滤器 .这也有效。我可以在我的 Swagger 文档中看到这些状态代码。

但分析器现在会产生警告: API1000: "Action method returns undeclared status code '400'."

在控制器类级别应用属性时结果相同。

我当然可以忽略这些警告。

问题是我是否在某处遗漏了一些配置,以便分析器检测这些全局或类级别的属性。

【问题讨论】:

    标签: c# asp.net-core asp.net-core-3.1


    【解决方案1】:

    请参阅此thread

    您可以创建一个自定义的 IApplicationModelProvider 并在 OnProvidersExecuting 方法中添加您需要的过滤器。

    关于IApplicationModelProvider

    【讨论】:

    • 基本上我正在做什么来导致问题。问题是 api-analyzer 无法识别属性,除非它们直接应用于操作方法。发现这是一个未解决的问题(请参阅我自己的答案中的链接)。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      相关资源
      最近更新 更多