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/


 

posted on 2025-05-26 00:02  是水饺不是水饺  阅读(30)  评论(0)    收藏  举报

导航