123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- 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<MysqlDbContext>(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<HttpClientService>();
- //builder.Services.AddSingleton<HttpClientUtils>();
- //controller
- builder.Services.AddControllers();
- //服务注册
- builder.Services.AddScoped<IStationService, StationServiceImpl>();
- builder.Services.AddScoped<IStationRepository, StationRepository>();
- builder.Services.AddScoped<IOilInfoService, OilInfoServiceImpl>();
- builder.Services.AddScoped<IOilInfoReposity, OilInfoReposity>();
- builder.Services.AddScoped<ITankInfoService, TankInfoServiceImpl>();
- builder.Services.AddScoped<ITankReposity, TankReposity>();
- builder.Services.AddScoped<INozzleInfnService, NozzleInfoServiceImpl>();
- builder.Services.AddScoped<INozzleInfoReposity, NozzleInfoReposity>();
- builder.Services.AddScoped<IOrderInfoService, OrderInfoService>();
- builder.Services.AddScoped<IOrderInfoReposity, OrderInfoReposity>();
- builder.Services.AddScoped<IMachineService, MachineServiceImpl>();
- builder.Services.AddScoped<IMachineRepository, MachineReposity>();
- builder.Services.AddScoped<IHttpClient, HttpClientService>();
- builder.Services.AddScoped<IHttpClientUtil, HttpClientUtils>();
- builder.Services.AddScoped<IFccProjectInfoServices, FccProjectInfoServices>();
- //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<ProcessorInstanceOperatingResult> 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<MysqlDbContext>();
- // context.Database.Migrate();
- // }
- //}
- app.Run();
|