You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
3.5 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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的TokenBearer {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<string>()
}
});
#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<IHostApplicationLifetime>();
// 注册应用程序停止事件关闭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();