Swagger在可能的端点上展开

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

我目前正在使用Swagger公开我所有的端点,但是这些端点当前的格式为:/get/{name}, /put/{name},其中的名称只能是我在数据库中拥有的名称?

以某种方式可以大胆地扩展通用API定义以包含一个可能进行的所有可能的API调用,这意味着所有可能的名称?

c# entity-framework swagger openapi swagger-codegen
1个回答
0
投票
在您的Startup类中,您可能正在ConfigureServices方法以及数据库上下文中注册Swagger。

您需要在AddSwaggerGen中添加一行以注册自定义过滤器。

public void ConfigureServices(IServiceCollection services) { services.AddDbContext<YourContext>(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); // Custom filter (could also be a SchemaFilter) c.ParameterFilter<CustomParametersFilter>(); }); }

这里是CustomParametersFilter类:

public class CustomParametersFilter : IParameterFilter
{
    private readonly YourContext dbContext;

    public CustomParametersFilter(YourContext dbContext)
    {
        // Here you also have access to IServiceProvider or any dependency
        this.dbContext = dbContext;
    }

    public void Apply(IParameter parameter, ParameterFilterContext context)
    {
        if (parameter.Name == "some_name")
        {
            // Use dbContext to retrieve your values
            List<string> validValues;
            // ...

            parameter.Description = string.Join(", ", validValues);
        }
    }
}

CustomParametersFilter的代码是一个起点,但是可以根据需要进行调整。 IParameter(和OpenApiParameter)提供了更多选项。

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