Asp.net core 如何将筛选器应用于带有Swashback的单个swagger文档

Asp.net core 如何将筛选器应用于带有Swashback的单个swagger文档,asp.net-core,.net-core,swashbuckle,swashbuckle.aspnetcore,Asp.net Core,.net Core,Swashbuckle,Swashbuckle.aspnetcore,我正在使用ASP.NET核心web服务生成多个swagger文档。我有一些只想应用于一个文档的过滤器,但它们似乎适用于所有文档 我有一个IDocumentFilter,IOperationFilter,IPParameterFilter,和ISchemaFilter,我只想在一种情况下应用。当我加载其他文档类型的招摇过市页面时,将应用我的过滤器。我可以调试并看到过滤器被附加到一个AddSwaggerGen中的SwaggerGenOptions上(可能调试器不会显示类型,但过滤器的数量会增加) 下

我正在使用ASP.NET核心web服务生成多个swagger文档。我有一些只想应用于一个文档的过滤器,但它们似乎适用于所有文档

我有一个
IDocumentFilter
IOperationFilter
IPParameterFilter
,和
ISchemaFilter
,我只想在一种情况下应用。当我加载其他文档类型的招摇过市页面时,将应用我的过滤器。我可以调试并看到过滤器被附加到一个
AddSwaggerGen
中的
SwaggerGenOptions
上(可能调试器不会显示类型,但过滤器的数量会增加)

下面是我在启动代码中使用的内容。
OpenApiConfigOptions
只是在别处设置的一个单例,其中包含一些信息,如API名称和描述

我认为既然
SwaggerDoc
扩展方法确实设置了多个文档,那么它将为每个文档使用一个新的
SwaggerGenOptions
。我的设置中有什么遗漏吗

我也看不到一种方法,在过滤器本身中,检查正在加载的文档,如果不是正确的文档,则跳过过滤器。这不是一个理想的解决方案,但如果我能在过滤器中找到该值,这可能是一个解决方法

使用Microsoft.Extensions.DependencyInjection;
使用Microsoft.OpenApi.Models;
命名空间Microsoft.Extensions.DependencyInjection
{
公共静态类ServiceCollectionExtensions
{
公共静态IServiceCollection注册表erMyoPenAPI(此IServiceCollection服务,OpenApiConfigOptions选项)
{
服务。注册惩罚文件(选项,“基本”);
var scheme=new OpenApiSecurityScheme()
{
Description=“基本身份验证”,
Type=SecuritySchemeType.Http,
Scheme=“基本”
};
服务。AddFilteredSecurity方案(“基本”、“基本”方案);
服务。注册处处罚文件(选项,“匿名”);
服务。RegisterOpenAPI文档(选项,“MYSPECIALTYPE”);
返回服务;
}
私有静态无效注册表PenapDocument(此IServiceCollection服务,OpenApiconfigoOptions选项,字符串类型)
{
services.AddSwaggerGen(c=>
{
var info=新的openapinfo
{
Title=options.ServiceTitle,
Description=options.servicesdescription,
版本=选项。版本
};
c、 SwaggerDoc(type.ToLowerInvariant(),info);
如果(类型==“MYSPECIALTYPE”)
{
//Azure APIM不了解枚举的引用类型
c、 使用RENUMS()的线性定义;
c、 文档过滤器(选项);
c、 操作过滤器();
c、 参数过滤器();
c、 SchemaFilter();
}
});
}
}
}

Hi。我不清楚真正的问题是什么。为了避免X/Y,请详细说明您的原始问题是什么?例如,您是否试图隐藏某些属性?BRWell,我主要应用了一系列特殊的规则进行转换,以使Azure API管理正确显示我的API。您可以看到其中一个是
UseInlineDefinitionsForEnums
。我想为我的大多数文档使用共享定义,但我需要为我的APIM文档使用内联版本。过滤器所做的其他一些事情是添加仅在一个文档中使用的自定义扩展,当参数是枚举数组时,更改参数说明,并将参数样式设置为
form
并禁用
explode
,以使API能够与Power Automation一起正常工作。它看起来将启用我为
IDocumentFilter
提到的解决方法,在该方法中,我可以检查文档名称,如果不是我想要的,则跳过该过滤器。但是,需要将其应用于所有过滤器,并且自2月份以来一直没有回购所有人的回复:(我明白了。现在大声想一想,设计优先会是一个解决方案吗?嗨。我不清楚真正的问题是什么。为了避免X/Y,你能详细说明一下你原来的问题是什么吗?例如,你是否试图隐藏一些属性?br嗯,主要是我应用了一系列特殊规则进行转换,以获得Azure API Management以正确显示我的API。您可以看到其中一个是
UseInlineDefinitionsForEnums
。我想为我的大多数文档使用共享定义,但我需要为我的APIM文档使用内联版本。过滤器所做的其他一些事情是添加仅在一个文档中使用的自定义扩展,请更改参数说明f或者,当一个参数是一个枚举数组时,将参数样式设置为
form
并禁用
explode
,以使API能够与Power Automation一起正常工作。它看起来会启用我提到的
IDocumentFilter
的解决方法,在这里我可以检查文档名称,如果不是我想要的,则跳过该过滤器。将需要应用于所有的过滤器,然而,自2月份以来一直没有得到回购所有人的回复:(我明白了。现在只是大声思考,设计优先是解决方案吗?