swagger 摆动-动态默认值

bvhaajcl  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(162)

我想为Swagger UI设置默认值。该值应该从appsettings.json中获取,因为它可能会因不同的环境而更改。我该如何做?
有这个:

app.MapPost("/route", async (string something) => await Task.Delay(0));

我的期望:
something变量在使用swagger用户界面时应该有默认值。它的值应该设置为appsettings json的值。

rta7y2nd

rta7y2nd1#

为此,我们可以定义与DefaultValueAttribute关联的OperationFilter
因此,首先,将最小API方法更改为默认值:

app.MapPost("/route", async ([DefaultValue("__configuration__SomeValue")]string something) => await Task.Delay(0));

然后定义OperationFilter,将定义的值动态替换为appsettings中的值:

public class OperationFilter : IOperationFilter
{
    private readonly IConfiguration _configuration;

    public OperationFilter(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        foreach (var parameter in operation.Parameters)
        {
            if (parameter.Schema.Default is OpenApiString @default &&
                @default.Value.StartsWith("__configuration__"))
            {
                parameter.Schema.Default = new OpenApiString(_configuration.GetValue<string>(@default.Value.Replace("__configuration__", string.Empty)));
            }
        }
    }
}

不知道这是否是最好的方法,但它只是工作,尝试

相关问题