3

我已经实现了一个Swashbuckle.Swagger.IOperationFilter来处理自定义属性,如下所述:https ://stackoverflow.com/a/52948376/13087

我现在想做类似的事情Swashbuckle.AspNetCore 5.0.0

该类似乎ApiDescription没有GetControllerAndActionAttributes在原始实现中使用的扩展方法。我尝试通过查看它的源代码来重新实现它,但它使用成员ApiDescription.ActionDescriptor.ControllerDescriptor并且ApiDescription.ActionDescriptor.GetCustomAttributes<TAttribute>我似乎不存在于 .NET Core 中。

任何人都可以通过向我展示如何获取自定义控制器和操作属性来帮助我入门IOperationFilter吗?

更新 看起来 .NET Framework 实现有一个ActionDescriptor实际上是ReflectedActionDescriptor。这个类有一个构造函数,它接受一个MethodInfo用于查找属性的构造函数。

但我看不到任何方法来获得MethodInfo.NET Core 实现Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor

4

2 回答 2

1

我找到了答案:有一个扩展方法ApiDescription.TryGetMethodInfo可以获取MethodInfo并因此可以访问自定义属性。

于 2020-03-01T11:27:08.053 回答
0

使用这样的代码:

var attributes = apiDescription.GetControllerAndActionAttributes<AuthorizeAttribute>();
if (!attributes.IsNullOrEmpty())
{
    var param = new Parameter
    {
        name = "Authorization",
        @in = "header",
        description = "Bearer + access token",
        required = false,
        type = "string"
    };

    if (operation.parameters == null)
        operation.parameters = new List<Parameter> { param };
    else
        operation.parameters.Add(param);
}
于 2021-01-12T08:51:17.130 回答