public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development")
{
// 开发环境
// 环境变量可在"配置启动项目"中临时设置
services.AddSwaggerGen(); // 注册Swagger文档(需要在管道中启用)
/**
* 令Swagger读取XML文档数据
* 在项目文件中添加<PropertyGroup><GenerateDocumentationFile>true</GenerateDocumentationFile></PropertyGroup>以生成XML文档
*/
services.AddSwaggerGen(options =>
{
// 获取 XML 文档的路径
var xmlFile = $"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
options.IncludeXmlComments(xmlPath);
});
}
services.AddDbContext<ThisDbContext>(); // 注册DB支持
services.AddControllers() // 注册控制器(需要在管道中启用)
// 使用System.Text.Json:
//.AddJsonOptions(options =>
//{
// options.JsonSerializerOptions.ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.IgnoreCycles; // 忽略循环引用
// options.JsonSerializerOptions.PropertyNamingPolicy = null; // 保持原有命名(PascalCase)
//});
// 使用NewtonsoftJson:
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; // 忽略循环引用
options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); // 保持原有命名策略(PascalCase)
});
//services.AddAuthentication(); // 注册身份验证(需要在管道中启用)
//services.AddAuthorization(); // 注册授权验证(需要在管道中启用)
services.AddCors(options =>
{ // CorsPolicy为跨域策略名(可选参数)
options.AddPolicy("CorsPolicy", builder =>
{
builder
.AllowAnyOrigin() // AllowAnyOrigin允许任何来源的跨域请求(.WithOrigins(url) 仅允许指定来源的跨域请求)
// 注意: URL末端切勿加上"/"
.AllowAnyMethod() // 允许任何HTTP方法
.AllowAnyHeader(); // 允许任何Header
//.AllowCredentials();// 允许凭据(授权/身份验证)
// // 1/2/3为默认选项 4需要人为开启
// // 设置项不允许均为AllowAnyxxx()
});
});
var app = builder.Build();
//app.UseHttpsRedirection(); // 将所有 HTTP 请求重定向为 HTTPS 请求
app.UseStaticFiles(); // 静态文件支持
//app.UseAuthentication(); // 身份验证(未注册服务则仅执行默认策略)
//app.UseAuthorization(); // 授权验证(未注册服务则仅执行默认策略)(授权验证基于身份验证成功后 该身份携带的"角色"种类)
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
//else
//{
// app.UseExceptionHandler("/Home/Error"); // 错误处理(重定向到错误页面)
// app.UseHsts(); // 强制浏览器仅通过 HTTPS 访问
//}
// 分析传入请求的URL并根据配置的路由模板(通常是在MapControllers等方法中定义的路由)进行匹配
// 为后续的中间件(UseEndpoints或UseAuthorization)提供路由信息
//app.UseRouting();
app.MapControllers();
app.UseCors("CorsPolicy");
app.Run();
}
}