netcore中使用Swagger版本控制

netCore中Swagger版本控制

添加枚举类型

定义版本号

 /// <summary>
 /// 版本控制
 /// </summary>
 public enum ApiVersion
 {
     /// <summary>
     /// v1版本
     /// </summary>
     V1 = 1,
         /// <summary>
         /// v2版本
         /// </summary>
         V2 = 2
 }

注册服务

在ConfigureServices方法中添加Swagger的服务

services.AddSwaggerGen(c =>
{
    //添加文档信息
    //遍历版本信息
    typeof(ApiVersion).GetEnumNames().ToList().ForEach(version =>
    {
        c.SwaggerDoc(version, new OpenApiInfo
        {
            Title = "SN blog API", //标题
                Description = "EFCore数据操作 ASP.NET Core Web API", //描述
                TermsOfService = new Uri("https://example.com/terms"), //服务条款
                Contact = new OpenApiContact
                {
                    Name = "kai ouyang", //联系人
                        Email = string.Empty, //邮箱
                        Url = new Uri("https://twitter.com/spboyer"), //网站
                },
                License = new OpenApiLicense
                {
                    Name = "Use under LICX", //协议
                        Url = new Uri("https://example.com/license"), //协议地址
                }
        });
    });
});

启用Swagger

在Configure方法中,我们需要启用Swagger中间件

app.UseSwaggerUI(c =>
{
    typeof(ApiVersion).GetEnumNames().ToList().ForEach(version =>
    {
        c.IndexStream = () => GetType().GetTypeInfo().Assembly.GetManifestResourceStream("Snblog.index.html");
        ////设置首页为Swagger
        c.RoutePrefix = string.Empty;
        //自定义页面 集成性能分析
        c.SwaggerEndpoint($ "/swagger/{version}/swagger.json", version);
        ////设置为none可折叠所有方法
        c.DocExpansion(DocExpansion.None);
        ////设置为-1 可不显示models
        c.DefaultModelsExpandDepth(-1);
    });
});

使用

ApiExplorerSettings 标记

[ApiExplorerSettings(GroupName = "V1")]
[ApiExplorerSettings(GroupName = "V2")]

在上面的代码中,我们使用ApiVersion特性来标记不同版本的API,并在路由中使用版本号

posted @ 2021-04-05 14:18  少年。  阅读(316)  评论(0)    收藏  举报