net8 WebAP Swagger

WebAPI 使用控制器 和不使用控制器【最小API】



WebAPI 测试用例

Swagger 》》获取注释说明


csharp 复制代码
 #region 配置注释
 string? basePath=Path.GetDirectoryName(typeof(Program).Assembly.Location)??"";
 string xmlPath = Path.Combine(basePath,"WebAPI001.xml");
 options.IncludeXmlComments(xmlPath);
 #endregion

Swagger 版本控制


csharp 复制代码
 builder.Services.AddSwaggerGen(options=>
 {
     #region 配置注释
     string? basePath=Path.GetDirectoryName(typeof(Program).Assembly.Location)??"";
     string xmlPath = Path.Combine(basePath,"WebAPI001.xml");
     options.IncludeXmlComments(xmlPath);
     #endregion
     #region 版本控制
     foreach (var item in typeof(VersionInfo).GetEnumNames())
     {
         options.SwaggerDoc(item, new Microsoft.OpenApi.Models.OpenApiInfo()
         {

             Title = $"{item}:这xxxxWebAPI",
             Version=item,
             Description=$"xxx {item} 版本"
         });

     }
     #endregion
 });
csharp 复制代码
 if (app.Environment.IsDevelopment())
 {
     app.UseSwagger();
     app.UseSwaggerUI(c => {
         foreach (var item in typeof(VersionInfo).GetEnumNames())
         {
             c.SwaggerEndpoint($"/swagger/{item}/swagger.json", $"{item}");
         }
     });
 }

》》 [ApiExplorerSettings(GroupName = nameof(VersionInfo.V3))]

》》定义枚举 版本控制

Swagger Token 这个为了方便 通过Swagger 测量api
csharp 复制代码
 builder.Services.AddSwaggerGen(options =>
 {
     #region 配置注释
     string? basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location) ?? "";
     string xmlPath = Path.Combine(basePath, "WebAPI001.xml");
     options.IncludeXmlComments(xmlPath);
     #endregion
     #region 版本控制
     foreach (var item in typeof(VersionInfo).GetEnumNames())
     {
         options.SwaggerDoc(item, new OpenApiInfo()
         {

             Title = $"{item}:这xxxxWebAPI",
             Version = item,
             Description = $"xxx {item} 版本"
         });

     }
     #endregion
     #region Swagger 支持  Token
     options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
     {

         Description = "请录入Token,格式:Bearer xxxx   Bearer 后面必须有个空格",
         Name = "Authorization",
         In = ParameterLocation.Header,
         Type = SecuritySchemeType.ApiKey,
         BearerFormat = "JWT",
         Scheme = "Bearer"
     });
     //添加安全要求
     options.AddSecurityRequirement(new OpenApiSecurityRequirement {
     {
         new OpenApiSecurityScheme{
             Reference =new OpenApiReference{
                 Type = ReferenceType.SecurityScheme,
                 Id ="Bearer"
             }
         },
         new string[]{ }
     }});
     #endregion
 });
Swagger 扩展方法

》》》原来的 program 添加的 Swagger

csharp 复制代码
using Microsoft.OpenApi.Models;
using WebAPI001.Coms;
using static System.Net.WebRequestMethods;

namespace WebAPI001
{

    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

            // Add services to the container.

            builder.Services.AddControllers();
            // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
            builder.Services.AddEndpointsApiExplorer();
            builder.Services.AddSwaggerGen(options =>
            {
                #region 配置注释
                string? basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location) ?? "";
                string xmlPath = Path.Combine(basePath, "WebAPI001.xml");
                options.IncludeXmlComments(xmlPath);
                #endregion
                #region 版本控制
                foreach (var item in typeof(VersionInfo).GetEnumNames())
                {
                    options.SwaggerDoc(item, new OpenApiInfo()
                    {

                        Title = $"{item}:这xxxxWebAPI",
                        Version = item,
                        Description = $"xxx {item} 版本"
                    });

                }
                #endregion
                #region Swagger 支持  Token
                options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
                {

                    Description = "请录入Token,格式:Bearer xxxx   Bearer 后面必须有个空格",
                    Name = "Authorization",
                    In = ParameterLocation.Header,
                    Type = SecuritySchemeType.ApiKey,
                    BearerFormat = "JWT",
                    Scheme = "Bearer"
                });
                //添加安全要求
                options.AddSecurityRequirement(new OpenApiSecurityRequirement {
                {
                    new OpenApiSecurityScheme{
                        Reference =new OpenApiReference{
                            Type = ReferenceType.SecurityScheme,
                            Id ="Bearer"
                        }
                    },
                    new string[]{ }
                }});
                #endregion
            });
            var app = builder.Build();

            // Configure the HTTP request pipeline.
            if (app.Environment.IsDevelopment())
            {
                app.UseSwagger();
                app.UseSwaggerUI(c =>
                {
                    foreach (var item in typeof(VersionInfo).GetEnumNames())
                    {
                        c.SwaggerEndpoint($"/swagger/{item}/swagger.json", $"{item}");
                    }
                });
            }

            app.UseAuthorization();


            app.MapControllers();

            app.Run();
        }
    }
}

》》》扩展方法之后

csharp 复制代码
using Microsoft.OpenApi.Models;

namespace WebAPI001.Coms
{
    public static class  SwaggerExtension
    {
        /// <summary>
        /// 注册Swagger
        /// </summary>
        /// <param name="services"></param>
        public static void AddSwaggerExt(this IServiceCollection services)
        {
            services.AddSwaggerGen(options =>
            {
                #region 配置注释
                string? basePath = AppContext.BaseDirectory;
                string xmlPath = Path.Combine(basePath, "WebAPI001.xml");
                options.IncludeXmlComments(xmlPath);
                #endregion
                #region 版本控制
                foreach (var item in typeof(VersionInfo).GetEnumNames())
                {
                    options.SwaggerDoc(item, new OpenApiInfo()
                    {

                        Title = $"{item}:这xxxxWebAPI",
                        Version = item,
                        Description = $"xxx {item} 版本"
                    });

                }
                #endregion
                #region Swagger 支持  Token
                options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
                {

                    Description = "请录入Token,格式:Bearer xxxx   Bearer 后面必须有个空格",
                    Name = "Authorization",
                    In = ParameterLocation.Header,
                    Type = SecuritySchemeType.ApiKey,
                    BearerFormat = "JWT",
                    Scheme = "Bearer"
                });
                //添加安全要求
                options.AddSecurityRequirement(new OpenApiSecurityRequirement {
                {
                    new OpenApiSecurityScheme{
                        Reference =new OpenApiReference{
                            Type = ReferenceType.SecurityScheme,
                            Id ="Bearer"
                        }
                    },
                    new string[]{ }
                }});
                #endregion
            });
        }
        /// <summary>
        /// 添加Swagger中间件
        /// </summary>
        /// <param name="app"></param>
        public static void UseSwaggerExt(this WebApplication app)
        {
            app.UseSwagger();
            app.UseSwaggerUI(c =>
            {
                foreach (var item in typeof(VersionInfo).GetEnumNames())
                {
                    c.SwaggerEndpoint($"/swagger/{item}/swagger.json", $"{item}");
                }
            });
        }
    }
}

》》》program 就清爽了很多了

Swagger 带参数
相关推荐
blackA_10 天前
JavaWeb学习——day8(MVC模式与session、cookie)
学习·mvc
PHASELESS41111 天前
深入理解Spring MVC:构建灵活Web应用的基石
java·网络·后端·spring·mvc
王有品13 天前
Spring MVC 会话管理实践教程:HttpSession 深入应用
java·spring·mvc
lwb_011814 天前
Spring MVC参数绑定终极手册:单&多参对象集合JSON文件上传精讲
spring·json·mvc
我的炸串拌饼店15 天前
ASP.NET MVC 中SignalR实现实时进度通信的深度解析
后端·asp.net·mvc
CUIYD_198915 天前
Spring MVC 处理静态资源请求 - ResourceHandler
java·spring·mvc
武帝为此18 天前
【SpringMVC 入门介绍】
java·spring·mvc
Cyanto19 天前
Spring MVC 核心枢纽:DispatcherServlet 的深度解析与实践价值
java·spring·mvc
fuze233319 天前
Spring MVC扩展消息转换器-->格式化时间信息
java·spring·mvc
qq_3340602119 天前
springmvc
java·spring·mvc