gpt4 book ai didi

asp.net-core - 从 ASP.Net Core OData 项目中的 Swashbuckle 生成的 Swagger 模式中排除某些模型

转载 作者:行者123 更新时间:2023-12-03 16:22:18 26 4
gpt4 key购买 nike

我正在使用 Swashbuckle 为我的 ASP.Net Core 3.1 OData 项目生成 Swagger 文档。

Controller 方法的生成是完美的。它根据模型正确生成模式,除了一件事:

对于模式中的每个模型,它还生成一个额外的 [ModelName]IQueryableODataValue条目,如下面的屏幕截图所示:

swagger doc screenshot

蓝色勾表示型号。以红色圈出的模型条目是也正在添加的多余条目。

请注意,它还会生成 Void模型,也用红色圈出。

如何获取 swagger 文档以省略我用红色圈出的模型条目?我怀疑这与添加 SchemaFilter 有关系。但我不知道如何应用它来解决这个问题。

编辑:
@0909EM 的评论让我对 SchemaFilter 进行了更多的挖掘,最后我应用了以下 SchemaFilter:

using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Linq;

namespace MyProject.SwaggerConfig
{
public class RemoveBogusDefinitions : ISchemaFilter
{
public void Apply(OpenApiSchema schema, SchemaFilterContext context)
{
foreach (var item in context.SchemaRepository.Schemas.Keys.Where(r => r.EndsWith("ODataValue")))
context.SchemaRepository.Schemas.Remove(item);

context.SchemaRepository.Schemas.Remove("Void");
}
}
}

只要 LAST schema 就可以工作添加到 context是我想保留的有效模型。问题是上面的代码执行了,然后 schema已添加到 context .所以如果最后 schema正在处理的恰好是我想排除的,上面的代码不会这样做。

我如何防止 schema从被添加到 context ?

最佳答案

在我的情况下,只有这样有效:

internal class SwaggerSchemaFilter : ISchemaFilter
{
public void Apply(OpenApiSchema schema, SchemaFilterContext context)
{
var keys = new System.Collections.Generic.List<string>();
var prefix = "My.Namespace";
foreach(var key in context.SchemaRepository.Schemas.Keys)
{
if (key.StartsWith(prefix))
{
keys.Add(key);
}
}
foreach(var key in keys)
{
context.SchemaRepository.Schemas.Remove(key);
}
}
}

关于asp.net-core - 从 ASP.Net Core OData 项目中的 Swashbuckle 生成的 Swagger 模式中排除某些模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59834222/

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