排除某些特定控制器使用 Swashbuckle (OpenApiParameter) 添加的默认 header 参数
Exclude default header parameters added with Swashbuckle (OpenApiParameter) for some specific controllers
是否有任何方法可以排除某些控制器使用默认的强制性 header 添加为 'OpenApiParameter'?我已通过以下方式将所需的 header 参数添加到所有 end-points:
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 或注册时进行管理?
我解决了这个问题。意识到 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"
}
});
}
是否有任何方法可以排除某些控制器使用默认的强制性 header 添加为 'OpenApiParameter'?我已通过以下方式将所需的 header 参数添加到所有 end-points:
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 或注册时进行管理?
我解决了这个问题。意识到 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"
}
});
}