【问题标题】:Get all CustomAttributes from Method and Controller inside IDocumentFilter, swashbuckle asp net core, swagger从 IDocumentFilter 内的 Method 和 Controller 获取所有 CustomAttributes,swashbuckle asp net core,swagger
【发布时间】:2019-09-17 13:45:56
【问题描述】:

版本:

  • 项目:ASP Net Core 2.1,Web API
  • 包:Swashbuckle.AspNetCore (4.0.1)

问题:

我创建了一个CheckIncludeForOperationFilter 类,它继承自Swashbuckle.AspNetCore.Swagger.IDocumentFilter,并实现了这个接口需要的唯一方法——public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)

这个类应该做什么?
它应该搜索IncludeForAttribute。这意味着我应该检查 API 中的操作是否具有此属性或整个控制器。

我有什么?

public class CheckIncludeForOperationFilter : IDocumentFilter
{
    public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
    {            
        foreach (var apiDescription in context.ApiDescriptions)
        {

        }
    }
}

当我在调试模式下启动程序时,事情变得有趣了,我可以清楚地看到对象apiDescription 有什么。它包含我搜索的所有内容。以下是动作属性:

apiDescription.ActionDescriptor.MethodInfo.CustomAttributes

以及所有控制器属性:

apiDescription.ActionDescriptor.MethodInfo.DeclaringType.CustomAttributes

问题是,编译器在调试中显示属性MethodInfo,但我写的时候它不见了。它以红色突出显示,我无权访问它:

如何获取所有属性?

干杯

【问题讨论】:

    标签: c# asp.net-core swagger swagger-2.0 swashbuckle


    【解决方案1】:

    你可以试试这个方法:

    MethodInfo methodInfo;
    var ss = apiDescription.TryGetMethodInfo(out methodInfo);
    var controllerFilters = methodInfo.DeclaringType.CustomAttributes;
    var actionFilters = methodInfo.DeclaringType.CustomAttributes;
    

    你会得到你的自定义属性。

    【讨论】:

      猜你喜欢
      • 2018-02-01
      • 2018-07-29
      • 2021-03-01
      • 2022-12-04
      • 2016-10-24
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多