swagger 配置 三 版本控制
类库
Microsoft.AspNetCore.Mvc.Versioning
Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer
注入
builder.Services.AddApiVersioning();
builder.Services.AddVersionedApiExplorer();

V1 代码 [ApiVersion("1.0")]
[ApiVersion("1.0")] [ApiVersion("2.0")] [Route("api/[controller]")] [ApiController] public class ProductsController : ControllerBase { private readonly TestOption _testOption; public ProductsController(IOptions<TestOption> testOption) { _testOption = testOption.Value; } [HttpPost] public IActionResult Create() { return Ok(_testOption); } }
v2 代码
[ApiVersion("1.0")] [Route("api/[controller]")] [ApiController] public class ProductsController : ControllerBase { [HttpGet] public IActionResult Get() { return Ok(); } }
builder.Services.AddTransient<IConfigureOptions<SwaggerGenOptions>, ConfigureSwaggerOptions>();
配置 SwaggerDoc
public class ConfigureSwaggerOptions : IConfigureOptions<SwaggerGenOptions> { readonly IApiVersionDescriptionProvider provider; public ConfigureSwaggerOptions(IApiVersionDescriptionProvider provider) => this.provider = provider; public void Configure(SwaggerGenOptions options) { foreach (var description in provider.ApiVersionDescriptions) { options.SwaggerDoc( description.GroupName, new OpenApiInfo() { Title = $"Sample API {description.ApiVersion}", Version = description.ApiVersion.ToString(), }); } } }
builder.Services.AddSwaggerGen();
var scope = app.Services.CreateScope();
IApiVersionDescriptionProvider provider = scope.ServiceProvider.GetService<IApiVersionDescriptionProvider>();
var descriptions = provider.ApiVersionDescriptions;
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.RoutePrefix = ""; // serve the UI at root
c.DocExpansion(DocExpansion.Full); // 控制文档的展开状态
c.EnableFilter(); // 启用过滤器等特性
//c.SwaggerEndpoint($"/swagger/v1/swagger.json", "API文档");
foreach (var item in descriptions)
{
c.SwaggerEndpoint($"/swagger/{item.GroupName}/swagger.json", $"API {item.GroupName} 文档");
}
});
使用 redoc
类库 Swashbuckle.AspNetCore.ReDoc
app.UseReDoc(c =>
{
c.DocumentTitle = "API文档";
c.RoutePrefix = "redoc";
// c.SpecUrl =$"/swagger/v1/swagger.json";
foreach (var item in descriptions)
{
c.SpecUrl = $"/swagger/{item.GroupName}/swagger.json";
}
});
访问 /redoc
http://localhost:5185/redoc/

浙公网安备 33010602011771号