using System.Buffers; using System.Data; using System.IO.Pipelines; using System.Runtime.CompilerServices; using System.Text; using BLW_Log.Controllers; using BLW_Log.Models; using BLW_Log.Push; using BLW_Log.services; using Common; using Commonlib; using DAL.PGModels; using IronPython.Hosting; using LiteDB; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; using Microsoft.Scripting.Ast; using Microsoft.Scripting.Hosting; using NLog; using NLog.Extensions.Logging; using NLog.Web; using Quartz; using static IronPython.Modules.PythonCsvModule; namespace BLW_Log { public class A { public string IP { get; set; } } public class Program { public static void Main(string[] args) { //var N = DateTime.Now.ToString("yyyy-MM-dd#HH:mm:ss:fff"); var builder = WebApplication.CreateBuilder(args); //builder.Services.AddSingleton(); builder.Services.AddMemoryCache(); //AddDbContext默认已经将DbContext注册为Scoped生命周期,再次显式注册会导致冲突 builder.Services.AddDbContext(options => { options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")); }); //builder.Services.AddScoped(); //builder.Services.AddSingleton(); builder.Services.AddHostedService(); // Add services to the container. builder.Services.AddControllersWithViews(); //builder.Logging.AddNLog(); builder.Services.AddCors(options => { options.AddPolicy(name: "KuaYu", policy => { policy .AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMethod(); }); }); builder.Services.AddAuthorization(); builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(option => { string DefaultKey = "hQ%]d?V4W.fbbQ@6M^S2hE392xr~9:%?'0_D}8JI.36R3Q@b5&e906Z]02Yn0ZadSer4kH4,7z0j8a7.C?nGD6Z8dusY8P7Ur2z@h8:2y_25MY>wS7ih:Vd2}3#Z~nhP"; var sec = Encoding.UTF8.GetBytes(builder.Configuration["JWT:SecretKey"] ?? DefaultKey); option.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters() { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = builder.Configuration["JwT:Issuer"], ValidAudience = builder.Configuration["JwT:Audience"], IssuerSigningKey = new SymmetricSecurityKey(sec) }; option.Events = new JwtBearerEvents { OnMessageReceived = context => { var token = context.Request.Headers["token"].FirstOrDefault(); if (string.IsNullOrEmpty(token)) { // 如果没有找到 token 头部,则继续检查 Authorization 头部 token = context.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last(); } // 如果找到了 token,则将其设置到 HttpContext 中 if (!string.IsNullOrEmpty(token)) { context.Token = token; } return Task.CompletedTask; } }; }); string ttt1 = builder.Configuration["ExcelGenerater"].ToString(); string[] ssk1 = ttt1.Split(','); int h = int.Parse(ssk1[0]); int m = int.Parse(ssk1[1]); int s = int.Parse(ssk1[2]); builder.Services.AddQuartz(q => { //var jobKey = new JobKey("SendEmailJob"); //q.AddJob(opts => opts.WithIdentity(jobKey)); //q.AddTrigger(opts => opts // .ForJob(jobKey) // .WithIdentity("SendEmailJob-trigger") // .WithCalendarIntervalSchedule(x => // { // x.WithIntervalInMinutes(30).Build(); // }) //); var jobKey1 = new JobKey("ExcelGenerateJob"); q.AddJob(opts => opts.WithIdentity(jobKey1)); q.AddTrigger(opts => opts .ForJob(jobKey1) .WithIdentity("ExcelGenerateJob-trigger") .StartAt(DateBuilder.TodayAt(h, m, s)) .WithCalendarIntervalSchedule(x => x .WithIntervalInDays(1) .InTimeZone(TimeZoneInfo.Local)) ); //q.AddTrigger(opts => opts // .ForJob(jobKey1) // .WithIdentity("ExcelGenerateJob-trigger") // .WithCronSchedule("0 0 17 * * ?", (schedule) => // { // schedule.WithMisfireHandlingInstructionDoNothing().InTimeZone(TimeZoneInfo.Local); // }) // 每天17:00 //); var jobKey2 = new JobKey("ScanExcel"); q.AddJob(opts => opts.WithIdentity(jobKey2)); q.AddTrigger(opts => opts .ForJob(jobKey2) .WithIdentity("ExcelScan-trigger") .WithCalendarIntervalSchedule(x => { x.WithIntervalInSeconds(30).Build(); }) ); var jobKey3 = new JobKey("DeleteFile"); q.AddJob(opts => opts.WithIdentity(jobKey3)); q.AddTrigger(opts => opts .ForJob(jobKey3) .WithIdentity("DeleteFile-trigger") .WithCronSchedule("0 0 1 * * ?", (schedule) => { schedule.WithMisfireHandlingInstructionDoNothing().InTimeZone(TimeZoneInfo.Local); }) // 每天17:00 ); }); builder.Services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true); builder.Services.AddSignalR(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseCors("KuaYu"); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.UseEndpoints(endpoints => { endpoints.MapHub("/blw/datapush"); }); // 配置静态文件服务,添加CDR文件的MIME类型 app.UseStaticFiles(new StaticFileOptions { ServeUnknownFileTypes = true, // 允许服务未知文件类型 DefaultContentType = "application/octet-stream", OnPrepareResponse = context => { // 如果是CDR文件,设置下载头 if (context.File.Name.EndsWith(".cdr")) { context.Context.Response.Headers.Append("Content-Disposition", "attachment"); } } }); StaticData.GetWebAPIMethod(); StaticData.GetGetLoginData(); app.Run(); } } }