当前位置: 首页 > news >正文

配置更加美观的 Swagger UI

//注册Swagger服务
private static void AddSwaggerService(IServiceCollection services){services.AddSwaggerGen(opt =>{opt.SwaggerDoc("Push", new OpenApiInfo{Version = "v1",Title = "Push API",Description = "Push API 文档",Contact = new OpenApiContact() { Name = "Yc" }});// 加载 XML 文档注释(如果有)var files = Directory.GetFiles(AppContext.BaseDirectory, "*.xml", SearchOption.TopDirectoryOnly);foreach (var file in files){opt.IncludeXmlComments(file, true);}});}// 启用Swagger和Swagger UI
private static void ConfigSwagger(IApplicationBuilder app, IWebHostEnvironment env){app.UseSwagger(opt => opt.RouteTemplate = "doc/swagger/{documentName}/swagger.json");app.UseKnife4UI(option =>{option.RoutePrefix = "doc";option.DocumentTitle = "Push API";option.SwaggerEndpoint("/doc/swagger/Push/swagger.json", "Push Docs");});}//完整Program.cs示例
internal class Program{static void Main(string[] args){var builder = WebApplication.CreateBuilder(args);/// <summary>/// 配置跨域/// </summary>builder.Services.AddCors(options =>{options.AddPolicy("Cors", policy =>{policy.AllowAnyHeader().AllowAnyOrigin().AllowAnyMethod();});});// 配置应用程序监听所有 IP 地址上的端口builder.WebHost.UseUrls("http://0.0.0.0:5000");// 配置 Kestrel 服务器以监听所有 IP 地址builder.WebHost.ConfigureKestrel(serverOptions =>{serverOptions.ListenAnyIP(5000); // 监听端口 5000 上的所有 IP 地址serverOptions.ListenAnyIP(0); // 0 表示由操作系统动态分配端口});// 配置应用程序配置builder.Configuration.SetBasePath(Directory.GetCurrentDirectory());builder.Configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);// 将配置绑定到 PushETOptions 实例builder.Services.Configure<PushETOptions>(builder.Configuration.GetSection(PushETOptions.ConfigKey));// 注册 FreeSqlHelperbuilder.Services.AddSingleton<FreeSqlHelper>();// 注册 Swagger 服务AddSwaggerService(builder.Services);// 添加控制器支持(用于Web API)builder.Services.AddControllers();// 构建应用程序var app = builder.Build();// 启用Swagger和Swagger UIConfigSwagger(app, app.Environment);// 配置中间件管道if (app.Environment.IsDevelopment()){app.UseDeveloperExceptionPage(); // 开发环境下显示详细错误页面}app.UseRouting();app.UseEndpoints(endpoints =>{endpoints.MapControllers(); // 映射控制器路由});// 运行应用程序app.Run();}private static void AddSwaggerService(IServiceCollection services){services.AddSwaggerGen(opt =>{opt.SwaggerDoc("Push", new OpenApiInfo{Version = "v1",Title = "Push API",Description = "Push API 文档",Contact = new OpenApiContact() { Name = "Yc" }});// 加载 XML 文档注释var files = Directory.GetFiles(AppContext.BaseDirectory, "*.xml", SearchOption.TopDirectoryOnly);foreach (var file in files){opt.IncludeXmlComments(file, true);}});}private static void ConfigSwagger(IApplicationBuilder app, IWebHostEnvironment env){app.UseSwagger(opt => opt.RouteTemplate = "doc/swagger/{documentName}/swagger.json");app.UseKnife4UI(option =>{option.RoutePrefix = "doc";option.DocumentTitle = "Push API";option.SwaggerEndpoint("/doc/swagger/Push/swagger.json", "Push Docs");});}}
  1. AddSwaggerService 方法

    • 此方法注册 Swagger 服务,并配置 Swagger 文档信息、安全定义(如 Bearer Token),以及其他 Swagger 相关设置。
    • opt.IncludeXmlComments(file, true); 使 Swagger 使用 XML 文档注释来生成更详细的 API 文档。
  2. ConfigSwagger 方法

    • 此方法配置了 Swagger 和 Swagger UI 的中间件,使得你可以通过 /doc 路径访问生成的 API 文档页面。
    • 使用 UseKnife4UI 是为了提供一个更加美观的 Swagger UI;如果报错请添加对应Nuget包 ; 
      using IGeekFan.AspNetCore.Knife4jUI;
  3. Main 方法中的调用

    • Main 方法中,你首先调用 AddSwaggerService(builder.Services) 来注册 Swagger 服务,然后在 app 构建之后,调用 ConfigSwagger(app, app.Environment) 来配置 Swagger 中间件。

运行后效果

  • 访问 http://localhost:5000/doc(或其他你配置的端口),你将看到 Swagger UI 页面,展示了所有 API 端点以及可用的操作。
http://www.lryc.cn/news/425928.html

相关文章:

  • 软件测试 - 基础(软件测试的生命周期、测试报告、bug的级别、与开发人员产生争执的调解方式)
  • RTX 4070 GDDR6显存曝光:性能与成本的平衡之选
  • canvas的基础使用
  • Windows 常用网络命令之 telnet(测试端口是否连通)
  • x264 编码器像素运算系列:asd8函数
  • 什么是AR、VR、MR、XR?
  • Epic Games 商店面向欧盟 iPhone 用户上线
  • 【计算机毕设项目】2025级计算机专业小程序项目推荐 (小程序+后台管理)
  • Fast API + LangServe快速搭建 LLM 后台
  • CSS继承、盒子模型、float浮动、定位、diaplay
  • 使用百度文心智能体创建AI旅游助手
  • 斗破C++编程入门系列之四:运算符和表达式
  • CVPR2024 | PromptAD: 仅使用正常样本进行小样本异常检测的学习提示
  • 文件批量上传,oss使用时间戳解决同名问题 以及一些sql bug
  • 机器学习——线性回归(sklearn)
  • Go 语言切片(Slice) 15
  • 嵌入式开发--STM32G030C8T6,写片上FLASH死机CFGBSY和写入出错
  • 通过Fiddler抓包保存网页上的视频(包括Bilibili、B站和其他视频站)亲测可用
  • 企业为什么需要安装加密软件
  • Spring Web MVC入门(下)
  • uniapp app中使用柱状图 折线图 圆环图和饼图
  • jmreport测试数据库出现 权限不足,此功能需要分配角色 解决方法
  • 这是啥设计模式-适配模式
  • 大语言模型(LLMs)Tokenizers详解
  • 分支-快排/归并---1
  • 代码随想录训练营 Day32打卡 动态规划 part01 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
  • 【智能流体力学】剖析ANSYS Fluent材料属性设定与边界条件
  • 微信小程序反编译工具
  • 线程基本概念
  • 在SpringBoot中执行后台任务