using FccLite.Web.Repositories.FccNozzleInfo; using FccLite.Web.Repositories.FccOilInfo; using FccLite.Web.Repositories.FccStationInfo; using FccLite.Web.Repositories.FccTankInfo; using FccLite.Web.Services.FccNozzleInfo; using FccLite.Web.Services.FccOilInfo; using FccLite.Web.Services.FccStaionInfo; using FccLite.Web.Services.FccTankInfo; using Microsoft.EntityFrameworkCore; using Edge.Core.Processor.Dispatcher; using Edge.Core.Processor; using Edge.Core.Processor.Dispatcher.ProcessorLoader; using Edge.Core.Core.database; using Edge.Core.HttpClient; using HengshanPaymentTerminal.Http; using FccLite.Web.Services.FccOrderInfo; using FccLite.Web.Repositories.FccOrderInfo; using FccLite.Web.Services.FccMachineInfo; using FccLite.Web.Repositories.FccMachineInfo; using OfficeOpenXml; using System.Text.Json; using FccLite.Web.Services.FccProjectInfo; var builder = WebApplication.CreateBuilder(args); // 自动加载 appsettings.json 和 appsettings.{Environment}.json builder.WebHost.ConfigureKestrel((context, options) => { var kestrelConfig = context.Configuration.GetSection("Kestrel"); options.Configure(kestrelConfig); }); DefaultDispatcher processorsDispatcher = null; //数据库 builder.Services.AddDbContext(options => options.UseMySql(builder.Configuration.GetConnectionString("DefaultConnection"), ServerVersion.AutoDetect(builder.Configuration.GetConnectionString("DefaultConnection"))) .LogTo(Console.WriteLine,LogLevel.Debug)); // http Client builder.Services.AddHttpClient(); builder.Services.AddSingleton(); //builder.Services.AddSingleton(); //controller builder.Services.AddControllers(); //服务注册 builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); //excel ExcelPackage.LicenseContext = LicenseContext.NonCommercial; //swagger builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = ".NET 6.0 API", Version = "v1", Description = "二维码项目 FCC 页面接口", }); }); { builder.Services.AddSingleton(ProcessorLoaderFactory.Create); builder.Services.AddSingleton(ProcessorMetaConfigAccessorFactory.Create); var serviceProvider = builder.Services.BuildServiceProvider(); Console.CancelKeyPress += (sender, arg) => { Environment.Exit(-1); }; processorsDispatcher = new DefaultDispatcher(serviceProvider); IEnumerable instantiateResults = null; instantiateResults = await processorsDispatcher.CreateProcessorsAsync("Main starting", false); var startResults = await processorsDispatcher.StartProcessorsAsync( instantiateResults.Where(r => r.Succeed).Select(r => r.ProcessorInstance), "Main starting"); } builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; // 支持 camelCase options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase; }); // 添加CORS服务,并允许所有来源 builder.Services.AddCors(options => { options.AddPolicy("AllowAll", policy => { policy.AllowAnyOrigin() // 允许所有来源(生产环境应指定具体域名) .AllowAnyMethod() // 允许所有 HTTP 方法 .AllowAnyHeader() // 允许所有请求头 .SetPreflightMaxAge(TimeSpan.FromSeconds(86400)); // 预检请求缓存时间 }); }); var app = builder.Build(); //跨域 app.UseCors("AllowAll"); app.Use(async (context, next) => { context.Response.Headers["Referrer-Policy"] = "strict-origin-when-cross-origin"; context.Request.EnableBuffering(); // 允许多次读取 var requestBody = await new StreamReader(context.Request.Body).ReadToEndAsync(); Console.WriteLine($"Request Body: {requestBody}"); context.Request.Body.Position = 0; // 重置流的位置 await next(); }); //controller app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); //swagger app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", ".NET 6 API V1"); }); //迁移数据库 //string? isMigrate = builder.Configuration.GetConnectionString("isMigrate"); //if (isMigrate != null && "true".Equals(isMigrate)) //{ // //using var context = new MysqlDbContext(); // //context.Database.Migrate(); // using (var scope = app.Services.CreateScope()) // { // var context = scope.ServiceProvider.GetRequiredService(); // context.Database.Migrate(); // } //} app.Run();