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 带参数
相关推荐
wang_shu_mo_ran6 天前
Spring MVC 常用注解和用法(二)——url,cookie,session
java·mvc
wang_shu_mo_ran10 天前
Spring MVC的常用注解和用法(一)
java·spring·mvc
Huanzhi_Lin14 天前
UI业务模块化随笔
ui·mvc·mvp·ecs·ui框架·模块化开发
杨运交15 天前
[070][Web模块]Spring MVC TOTP 二次认证拦截器:设计与源码深度解析
前端·spring·mvc
爱敲代码的小杨.18 天前
【Spring】Spring Web MVC
前端·spring·mvc
风云19 天前
Vane.Dispatch 1.0.0 发布:一个与容器、传输层零耦合的 .NET 服务分发引擎
微服务·mvc·.net·ndf·vane.dispatch
事圆则缓21 天前
MVC、MVP、MVVM、MVI 的区别与实现原理
android·kotlin·mvc
Zzzzmo_22 天前
Spring MVC
java·spring·mvc·cookie/session
Mr.敦的私房菜22 天前
【SpringBoot请求记录】Spring Boot Actuator 自定义记录 HTTP 服务请求
spring boot·mvc·运维开发
MetaLite1 个月前
Spring-MVC微服务接口怎么分层-网关Controller与Service边界
spring·微服务·mvc