版本:
问题:
我创建了一个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
以及所有Controller属性:
apiDescription.ActionDescriptor.MethodInfo.DeclaringType.CustomAttributes
问题是,编译器在调试中显示属性MethodInfo
,但在编写它时缺少它。它是用红色突出显示的,我无法访问它:
我如何获得所有属性?
干杯
发布于 2019-09-17 14:31:16
您可以尝试这种方法:
MethodInfo methodInfo;
var ss = apiDescription.TryGetMethodInfo(out methodInfo);
var controllerFilters = methodInfo.DeclaringType.CustomAttributes;
var actionFilters = methodInfo.DeclaringType.CustomAttributes;
您将得到您的自定义属性。
https://stackoverflow.com/questions/57975670
复制相似问题