排除某些特定控制器随Swashbuckle(OpenApiParameter)添加的默认标头参数

时间:2020-07-01 19:02:05

标签: c# .net-core openapi swashbuckle

有什么办法可以排除某些控制器使用默认的强制标头作为“ OpenApiParameter”添加的情况?我通过以下方式将必需的标头参数添加到了所有端点:

public class RequiredHeadersFilter : IOperationFilter
{
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        if (operation.Parameters == null)
            operation.Parameters = new List<OpenApiParameter>();

        operation.Parameters.Add(
            new OpenApiParameter
            {
                Name = "my-default-header",
                In = ParameterLocation.Header,
                Required = true,
                Schema = new OpenApiSchema
                {
                    Type = "string"
                } 
            });
    }
}
            
            

但是我需要以某种方式排除我的“ NoHeaderNeedController”。 是否可以在OpenApiParameters中或在注册时进行管理?

1 个答案:

答案 0 :(得分:2)

我解决了这个问题。意识到IOperationFilter实际上针对每个方法都在运行,因此仅从OperationFilterContext中获取了控制器名称,并对此进行了检查:

    var controllerName = (context.ApiDescription.ActionDescriptor as ControllerActionDescriptor)?.ControllerName;

        if (!string.IsNullOrWhiteSpace(controllerName) && !controllerName.StartsWith("NoHeaderNeed"))
        {
            operation.Parameters.Add(
                new OpenApiParameter
                {
                    Name = "my-default-header",
                    In = ParameterLocation.Header,
                    Required = true,
                    Schema = new OpenApiSchema
                    {
                        Type = "string"
                    }
                });
        }