如何使用swashbuckle为.net核心webapi项目对swagger生成的默认XML模式体参数进行排序

时间:2017-07-18 20:36:00

标签: asp.net-web-api swagger swashbuckle

image

数据合同反序列化器需要按照swagger样本请求体类型的升序进行反序列化吗?

如何才能使其正常工作?例如,这是由swagger生成的示例XML架构。

fig, ax = plt.subplots()
ax.plot(y)
plt.show()

我需要按字母顺序排序,以便数据合同deserialser对其进行反序列化。

2 个答案:

答案 0 :(得分:1)

使用swagger 3,dotnet核心3.1 放置在Startup.cs中

public class SortModelDocumentFilter : Swashbuckle.AspNetCore.SwaggerGen.IDocumentFilter
{
    public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
    {            
        var schemas = swaggerDoc.Components.Schemas.OrderBy(x=>x.Key).ToDictionary(x=>x.Key,y=>y.Value);
        swaggerDoc.Components.Schemas.Clear();
        Console.WriteLine($"{schemas?.Count}");
        foreach (var prop in schemas)
        {
            swaggerDoc.Components.Schemas.Add(prop.Key, prop.Value);
        }
        int k = 0;
        foreach (var schema in schemas)   Console.WriteLine($"{k++}. {schema.Key}");
                        
    }
}

,然后在ConfigureServices(IServiceCollection服务)中添加

services.AddSwaggerGen(x => {
    ...
    x.DocumentFilter<SortModelDocumentFilter>();
});

答案 1 :(得分:0)

您在示例中看到的顺序正是模型中的顺序 如果您想更改订单,只需更改您的模型。



这是一个例子:
http://swashbuckletest.azurewebsites.net/swagger/ui/index?filter=Dict#/Dictionary/Dictionary_PostEcho

以下是该控制器背后的代码:
https://github.com/heldersepu/SwashbuckleTest/blob/master/Swagger_Test/Controllers/DictionaryController.cs#L25



如果不能更改模型,您可以创建一个 IDocumentFilter 来转换最终的SwaggerDocument以满足您的需求,这里有一些示例: https://github.com/heldersepu/SwashbuckleTest/blob/master/Swagger_Test/App_Start/SwaggerConfig.cs#L301