using System.Diagnostics; using HttpClientStudy.Core.Utilities; using Microsoft.OpenApi.Models; //启动WebApi程序 AppUtility.StartWebApiProject(); 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(); //配置Swagger builder.Services.AddSwaggerGen(setup => { #region 定义Swagger文档 //name参数即为SwaggerUI中SwaggerEndpoint方法参数中的{documentName} //两者必须保持一致,否则异常 setup.SwaggerDoc(name: "v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "HttpClient学习", Version = "第1版" }); #endregion #region 包含xml注释 var xmlCommentFiles = System.IO.Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "HttpClientStudy.*.xml", System.IO.SearchOption.TopDirectoryOnly); foreach (var xmlFile in xmlCommentFiles) { //includeControllerXmlComments参数:是否启用控制器上的xml注释 setup.IncludeXmlComments(filePath: xmlFile, includeControllerXmlComments: true); setup.UseInlineDefinitionsForEnums(); } #endregion /* #region 放置接口Auth授权按钮 setup.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Description = "请输入带有Bearer的Token:Bearer {Token}", //jwt默认的参数名称 Name = "Authorization", //jwt默认存放 Authorization 信息的位置:此处为请求头中 In = ParameterLocation.Header, //验证类型:此处使用Api Key Type = SecuritySchemeType.ApiKey }); #endregion #region 指定方案应用范围 setup.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Id = "Bearer", Type = ReferenceType.SecurityScheme } }, new List() } }); #endregion */ //启用数据注解 setup.EnableAnnotations(); }); var app = builder.Build(); // Configure the HTTP request pipeline. app.UseSwagger(); app.UseSwaggerUI(setup => { setup.EnableDeepLinking(); setup.DisplayRequestDuration(); setup.ShowCommonExtensions(); setup.ShowExtensions(); setup.EnableFilter(); }); app.UseAuthorization(); app.MapControllers(); #region 退出时,关闭WebAPI进程 /* * 1、退出执行机制,本身不太可靠,只有正常退出时才执行。 * 2、正常退出,比如 ctl+c 操作 * 3、非正常退出:比如 程序崩溃、内存泄漏、关闭进程,特别是调试WebAPI时,如果启动时打开了浏览器,则关闭浏览器时退出属于异常退出。 */ // 获取 IHostApplicationLifetime 实例 var applicationLifetime = app.Services.GetRequiredService(); // 注册应用程序停止事件:关闭WebApi applicationLifetime.ApplicationStopping.Register(() => { //注意:在 Visual Studio 2022 预览版中,执行时异常;正式版中正常。应该是预案版的Bug AppUtility.ExitWebApiProject(); }); applicationLifetime.ApplicationStopped.Register(() => { Console.WriteLine("程序已停止"); }); #endregion //默认Swagger页 app.Map("/", async context => { context.Response.Redirect($"{context.Request.PathBase}/swagger/index.html"); await Task.CompletedTask; }); app.Run();