有什么办法可以排除某些控制器使用默认的强制标头作为“ 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中或在注册时进行管理?
答案 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"
}
});
}