我目前正在使用Swagger公开我所有的端点,但是这些端点当前的格式为:/get/{name}, /put/{name}
,其中的名称只能是我在数据库中拥有的名称?
以某种方式可以大胆地扩展通用API定义以包含一个可能进行的所有可能的API调用,这意味着所有可能的名称?
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
)提供了更多选项。