使用swashbuckle为嵌套类型定制swagger模式

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

我有一个api(ASP.NET Core 3.0),允许用户使用各种查询参数来搜索文档数据库以筛选和排序结果。参数之一是Order参数,该参数定义如何对结果进行排序。可接受的值限于枚举的值。

我现在需要向枚举添加更多行为,因此我将其重新编写为Enumeration Class,以便可以向其添加面向对象的行为。我现在遇到的问题是Swashbuckle使Enumeration的属性变平,而不是将其保留为单个参数。这是我的枚举和参数类:

// Enumeration
public class DocSearchOrder : Enumeration {
    public static readonly DocSearchOrder DocType = new DocSearchOrder(2, nameof(DocType));
    public static readonly DocSearchOrder DocTypeDesc = new DocSearchOrder(3, nameof(DocTypeDesc));
    public static readonly DocSearchOrder DocDate = new DocSearchOrder(4, nameof(DocDate));
    public static readonly DocSearchOrder DocDateDesc = new DocSearchOrder(5, nameof(DocDateDesc));

    public DocSearchOrder(int value, string name) : base(value, name) {
    }
}

// Search Parameters
public class DocSearchParameters {

    public DocSearchOrder? Order { get; set; }

    // Lots of other search parameters
}

然后使用它的方法:

public async Task<IActionResult> GetAsync([FromQuery] DocSearchParameters searchParams) {
    // Do the search
}

[Swashbuckle将searchParams.Order展平为DocSearchOrder.IdDocSearchOrder.Name。我要实现的行为是使我的Swagger UI继续显示用户可以使用名为“ Order”的参数选择的可用值(DocSearchOrder.Name)的下拉列表。然后,您传递这些字符串值之一,然后自定义模型绑定程序将字符串转换为Enumeration类实例。

我曾尝试编写自定义IOperationFilter,但这似乎仅对修改传递给GetAsync方法的类型的模式有效,我无法拦截searchParams.Order的模式生成。我以为我可以做的是以某种方式拦截任何为Enumeration的属性的模式生成,并为其生成枚举模式而不是对象模式,但是我不知道如何对其进行拦截。 >

所以我的问题是:有没有一种方法可以为嵌套类型自定义架构生成?还是有另一种方法可以解决这个问题,而我做错了一切? :)

我有一个api(ASP.NET Core 3.0),允许用户使用各种查询参数来搜索文档数据库以筛选和排序结果。参数之一是Order参数,该参数是...

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

常规枚举如何:

© www.soinside.com 2019 - 2024. All rights reserved.