我有以下IOperationFilter
类,它实现了API应用程序中某些端点所需的身份验证头:
public class AuthenticationHeadersFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
if (operation.Parameters == null)
operation.Parameters = new List<OpenApiParameter>();
operation.Parameters.Add(new OpenApiParameter
{
Name = "AccountName",
In = ParameterLocation.Header,
Required = true
});
operation.Parameters.Add(new OpenApiParameter
{
Name = "ApiKey",
In = ParameterLocation.Header,
Required = true
});
}
}
通过在Startup.cs
的ConfigureServices
方法中执行以下操作,将上述内容添加到应用程序的Swagger UI中:
services.AddSwaggerGen(c =>
{
// ...
// other Swagger configurations
// ...
c.OperationFilter<AuthenticationHeadersFilter>();
});
这很好用,但是我现在也有一些端点,我希望由Swagger记录/显示,但是应该是完全公开的,而不需要用户在他们的API请求中提供AccountName
和ApiKey
作为头文件。我该如何完成呢?
我找到了this Stack Overflow answer,但不确定它是否适合我在这里的用途。我无法找到任何关于OperationFilterContext
类的有用文档。
任何帮助都是非常感谢的。
2条答案
按热度按时间ql3eal8s1#
可能的解决方案是使用如下属性
并在swagger AuthenticationHeadersFilter中使用它,如下所示:
因此,当您将属性添加到控制器操作时,该操作将被过滤掉。
5ktev3wc2#
SwaggerOperationFilter
属性特别适用于这种情况。您需要安装并启用软件包
Swashbuckle.AspNetCore.Annotations
:然后可以像
[SwaggerOperationFilter(typeof(YourFilterClass))]
一样使用它,而不是c.OperationFilter<YourFilterClass>();