Program.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. using FccLite.Web.Repositories.FccNozzleInfo;
  2. using FccLite.Web.Repositories.FccOilInfo;
  3. using FccLite.Web.Repositories.FccStationInfo;
  4. using FccLite.Web.Repositories.FccTankInfo;
  5. using FccLite.Web.Services.FccNozzleInfo;
  6. using FccLite.Web.Services.FccOilInfo;
  7. using FccLite.Web.Services.FccStaionInfo;
  8. using FccLite.Web.Services.FccTankInfo;
  9. using Microsoft.EntityFrameworkCore;
  10. using Edge.Core.Processor.Dispatcher;
  11. using Edge.Core.Processor;
  12. using Edge.Core.Processor.Dispatcher.ProcessorLoader;
  13. using Edge.Core.Core.database;
  14. using Edge.Core.HttpClient;
  15. using HengshanPaymentTerminal.Http;
  16. using FccLite.Web.Services.FccOrderInfo;
  17. using FccLite.Web.Repositories.FccOrderInfo;
  18. using FccLite.Web.Services.FccMachineInfo;
  19. using FccLite.Web.Repositories.FccMachineInfo;
  20. using OfficeOpenXml;
  21. using System.Text.Json;
  22. using FccLite.Web.Services.FccProjectInfo;
  23. var builder = WebApplication.CreateBuilder(args);
  24. // 自动加载 appsettings.json 和 appsettings.{Environment}.json
  25. builder.WebHost.ConfigureKestrel((context, options) =>
  26. {
  27. var kestrelConfig = context.Configuration.GetSection("Kestrel");
  28. options.Configure(kestrelConfig);
  29. });
  30. DefaultDispatcher processorsDispatcher = null;
  31. //数据库
  32. builder.Services.AddDbContext<MysqlDbContext>(options =>
  33. options.UseMySql(builder.Configuration.GetConnectionString("DefaultConnection"), ServerVersion.AutoDetect(builder.Configuration.GetConnectionString("DefaultConnection")))
  34. .LogTo(Console.WriteLine,LogLevel.Debug));
  35. // http Client
  36. builder.Services.AddHttpClient();
  37. builder.Services.AddSingleton<HttpClientService>();
  38. //builder.Services.AddSingleton<HttpClientUtils>();
  39. //controller
  40. builder.Services.AddControllers();
  41. //服务注册
  42. builder.Services.AddScoped<IStationService, StationServiceImpl>();
  43. builder.Services.AddScoped<IStationRepository, StationRepository>();
  44. builder.Services.AddScoped<IOilInfoService, OilInfoServiceImpl>();
  45. builder.Services.AddScoped<IOilInfoReposity, OilInfoReposity>();
  46. builder.Services.AddScoped<ITankInfoService, TankInfoServiceImpl>();
  47. builder.Services.AddScoped<ITankReposity, TankReposity>();
  48. builder.Services.AddScoped<INozzleInfnService, NozzleInfoServiceImpl>();
  49. builder.Services.AddScoped<INozzleInfoReposity, NozzleInfoReposity>();
  50. builder.Services.AddScoped<IOrderInfoService, OrderInfoService>();
  51. builder.Services.AddScoped<IOrderInfoReposity, OrderInfoReposity>();
  52. builder.Services.AddScoped<IMachineService, MachineServiceImpl>();
  53. builder.Services.AddScoped<IMachineRepository, MachineReposity>();
  54. builder.Services.AddScoped<IHttpClient, HttpClientService>();
  55. builder.Services.AddScoped<IHttpClientUtil, HttpClientUtils>();
  56. builder.Services.AddScoped<IFccProjectInfoServices, FccProjectInfoServices>();
  57. //excel
  58. ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
  59. //swagger
  60. builder.Services.AddSwaggerGen(c =>
  61. {
  62. c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo
  63. {
  64. Title = ".NET 6.0 API",
  65. Version = "v1",
  66. Description = "二维码项目 FCC 页面接口",
  67. });
  68. });
  69. {
  70. builder.Services.AddSingleton(ProcessorLoaderFactory.Create);
  71. builder.Services.AddSingleton(ProcessorMetaConfigAccessorFactory.Create);
  72. var serviceProvider = builder.Services.BuildServiceProvider();
  73. Console.CancelKeyPress += (sender, arg) =>
  74. {
  75. Environment.Exit(-1);
  76. };
  77. processorsDispatcher = new DefaultDispatcher(serviceProvider);
  78. IEnumerable<ProcessorInstanceOperatingResult> instantiateResults = null;
  79. instantiateResults = await processorsDispatcher.CreateProcessorsAsync("Main starting", false);
  80. var startResults = await processorsDispatcher.StartProcessorsAsync(
  81. instantiateResults.Where(r => r.Succeed).Select(r => r.ProcessorInstance),
  82. "Main starting");
  83. }
  84. builder.Services.AddControllers()
  85. .AddJsonOptions(options =>
  86. {
  87. options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; // 支持 camelCase
  88. options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;
  89. });
  90. // 添加CORS服务,并允许所有来源
  91. builder.Services.AddCors(options =>
  92. {
  93. options.AddPolicy("AllowAll", policy =>
  94. {
  95. policy.AllowAnyOrigin() // 允许所有来源(生产环境应指定具体域名)
  96. .AllowAnyMethod() // 允许所有 HTTP 方法
  97. .AllowAnyHeader() // 允许所有请求头
  98. .SetPreflightMaxAge(TimeSpan.FromSeconds(86400)); // 预检请求缓存时间
  99. });
  100. });
  101. var app = builder.Build();
  102. //跨域
  103. app.UseCors("AllowAll");
  104. app.Use(async (context, next) =>
  105. {
  106. context.Response.Headers["Referrer-Policy"] = "strict-origin-when-cross-origin";
  107. context.Request.EnableBuffering(); // 允许多次读取
  108. var requestBody = await new StreamReader(context.Request.Body).ReadToEndAsync();
  109. Console.WriteLine($"Request Body: {requestBody}");
  110. context.Request.Body.Position = 0; // 重置流的位置
  111. await next();
  112. });
  113. //controller
  114. app.UseHttpsRedirection();
  115. app.UseAuthorization();
  116. app.MapControllers();
  117. //swagger
  118. app.UseSwagger();
  119. app.UseSwaggerUI(c =>
  120. {
  121. c.SwaggerEndpoint("/swagger/v1/swagger.json", ".NET 6 API V1");
  122. });
  123. //迁移数据库
  124. //string? isMigrate = builder.Configuration.GetConnectionString("isMigrate");
  125. //if (isMigrate != null && "true".Equals(isMigrate))
  126. //{
  127. // //using var context = new MysqlDbContext();
  128. // //context.Database.Migrate();
  129. // using (var scope = app.Services.CreateScope())
  130. // {
  131. // var context = scope.ServiceProvider.GetRequiredService<MysqlDbContext>();
  132. // context.Database.Migrate();
  133. // }
  134. //}
  135. app.Run();