gpt4 book ai didi

c# - 如何将架构过滤器添加到一个 Swashbuckle api 文档版本

转载 作者:行者123 更新时间:2023-12-05 05:07:29 26 4
gpt4 key购买 nike

我有一个问题,我使用 Swashbuckle 4 并且它不支持多态,我发现有两个过滤器可以做到这一点。一个 DocumentFilter 和一个 SchemaFilter。

他们工作起来很有魅力。

但现在我遇到了一个问题,我向我的 api 添加了第二个版本。但是我有一个版本 2 才支持的多态模型。

但我发现无法将这些过滤器仅添加到一个 api 版本,因为它们是在启动时添加到 SwaggerGenOptions 的。

我有点震惊的是 Swashbuckle 似乎不支持每个版本的过滤器,因为版本恰好是为了在一个项目中分隔两个代码世界。

有什么想法吗?

最佳答案

我们需要一个例子的原因是因为有不同的方法来处理版本控制。我不确定你是怎么做的,但通常模型是用一个同名的新类版本化的,但在不同的命名空间中,在这种情况下没有问题。注册所有过滤器。他们应该知道如何判断正在处理的对象是否是他们知道如何处理的对象。我不熟悉 IDocumentFilter,但对于 ISchemaFilter:

    public class MyV1SchemaFilter : ISchemaFilter
{
public void Apply(Schema schema, SchemaFilterContext context)
{
if (context.SystemType != MyProject.Models.v1.MyModel) return;
/// configure v1 schema
}
}

public class MyV2SchemaFilter : ISchemaFilter
{
public void Apply(Schema schema, SchemaFilterContext context)
{
if (context.SystemType != MyProject.Models.v2.MyModel) return;
/// configure v2 schema
}
}

您也可以将它们全部放在一个过滤器中:

    public class MySchemaFilter : ISchemaFilter
{
public void Apply(Schema schema, SchemaFilterContext context)
{
if (context.SystemType == MyProject.Models.v1.MyModel)
{
/// configure v1 schema
}
else if (context.SystemType == MyProject.Models.v2.MyModel)
{
/// configure v2 schema
}
}
}

如果您以某种方式让两个版本都由同一个类表示,那么您可能需要将它们分开。

DocumentFilterContext 似乎有足够的数据让它知道它传递的是哪个版本。

关于c# - 如何将架构过滤器添加到一个 Swashbuckle api 文档版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59093955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com