从ASP.Net Core OData控制器的Swagger架构中排除* IQueryableODataValue模型

问题描述 投票:0回答:1

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

控制器方法的生成是完美的。它可以根据模型正确生成模式,除了以下几点:

对于模式中的每个模型,它还会生成一个附加的[ModelName]IQueryableODataValue条目,如下面的屏幕快照所示:

swagger doc screenshot

蓝色复选标记指示型号。用红色圈起来的模型条目是多余的条目,也正在添加。

注意,它也在生成Void模型,也用红色圆圈圈出。

如何获得基本的文档,以省去我用红色圆圈圈出的模型条目?我怀疑这与添加SchemaFilter有关。但我不知道如何应用它来解决此问题。

asp.net-core swagger odata swashbuckle
1个回答
0
投票

@@ 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");
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.