using Autofac.Extensions.DependencyInjection; using Autofac; using FreeRedis; using MessagePack; using MessagePack.Resolvers; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using ServiceStack; using WMS.BZUtil; using WMS.BZWeb; using WMS.BZWeb.Middleware; using WMS.Util; using WMS.BZSqlSugar; using WMS.BZServices; using Microsoft.Extensions.DependencyInjection; using SqlSugar; using Microsoft.Extensions.DependencyInjection.Extensions; using WMS.BZSqlSugar.Repositorys; var builder = WebApplication.CreateBuilder(args); builder.Logging.AddLog4Net(); builder.Services.AddAuthentication("CookieAuth") .AddCookie("CookieAuth", config => { config.Cookie.Name = "MyApp.Cookie"; }); // Add services to the container. builder.Services.AddControllersWithViews() ; // Add services to the container. // AddRazorRuntimeCompilation 与FastReport 冲突。 var AddRazorPages= builder.Services.AddRazorPages() ; #if DEBUG AddRazorPages.AddRazorRuntimeCompilation(); #endif var WMSRedisConnect = builder.Configuration.GetValue("ConnectionConfigs:WMSRedisConnect"); //Autofac注入 builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()); builder.Host.ConfigureContainer(builder => { builder.RegisterGeneric(typeof(Repository<>)).As(typeof(Repository<>)); builder.RegisterGeneric(typeof(QuestDBRepository<>)).As(typeof(QuestDBRepository<>)); //builder.RegisterGeneric(typeof(PTRepository<>)).As(typeof(PTRepository<>)); //builder.RegisterGeneric(typeof(HJRepository<>)).As(typeof(HJRepository<>)); //builder.RegisterGeneric(typeof(FJRepository<>)).As(typeof(FJRepository<>)); //builder.RegisterGeneric(typeof(CPRepository<>)).As(typeof(CPRepository<>)); //builder.RegisterGeneric(typeof(SXRepository<>)).As(typeof(SXRepository<>)); builder.RegisterModule(new AutoFacManager()); builder.Register(obj => new RedisService(WMSRedisConnect)).SingleInstance(); }); builder.Services.AddResponseCompression(); builder.Services.AddHttpContextAccessor(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); //builder.Services.AddTransient(); // 添加 Redis 配置项 builder.Services.Configure(builder.Configuration.GetSection("WCSRedis")); builder.Services.Configure(builder.Configuration.GetSection("DeviceEffectiveUrls")); builder.Services.AddSingleton(provider => { var options = provider.GetRequiredService>(); return new Dictionary { { "HJUrls", options.Value.HJUrls}, { "PTUrls", options.Value.PTUrls }, { "FJUrls", options.Value.FJUrls }, { "SXUrls", options.Value.SXUrls }, { "CPUrls", options.Value.CPUrls } }; }); builder.Services.AddSingleton(provider => { MessagePackSerializer.DefaultOptions = StandardResolver.Options.WithCompression(MessagePackCompression.Lz4Block); var options = provider.GetRequiredService>(); return new Dictionary { { "HJRedis", new RedisClient(options.Value.HJRedis) //options.Value.HJRedis "118.178.107.197:6379,database=0,password=123456" { Serialize = obj => { var bytes = JsonConvert.SerializeObject(obj);// MessagePackSerializer.Serialize(obj); return bytes; }, Deserialize = (bytes, type) => { var obj = JsonConvert.DeserializeObject(bytes, type);// MessagePackSerializer.Deserialize(type, bytes); return obj; } } }, { "PTRedis", new RedisClient(options.Value.PTRedis) }, { "FJRedis", new RedisClient(options.Value.FJRedis) }, { "SXRedis", new RedisClient(options.Value.SXRedis) }, { "CPRedis", new RedisClient(options.Value.CPRedis) } }; }); builder.Services.AddMvcCore(); //builder.Services.AddMvc().AddRazorPagesOptions(options => //{ // options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute()); //}); builder.Services.AddSession(o => { o.IdleTimeout = TimeSpan.FromHours(5); }); //配置JSON.NET builder.Services.AddControllers().AddNewtonsoftJson(opt => { //忽略循环引用 opt.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; //不改变字段大小 opt.SerializerSettings.ContractResolver = new DefaultContractResolver(); }); //builder.Services.AddAntiforgery(options => options.HeaderName = "X-CSRF-TOKEN"); //builder.WebHost.UseUrls("http://*:5000/"); builder.Services.AddCors(policy => { policy.AddPolicy("CorsPolicy", opt => opt .AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMethod() .WithExposedHeaders("X-Pagination")); }); var deviceEffectiveUrls = builder.Configuration.GetSection("DeviceEffectiveUrls").Get(); builder.Services.AddHttpClient("HJUrls", config => { config.BaseAddress = new Uri(deviceEffectiveUrls.HJUrls); //config.DefaultRequestHeaders.Add("header_1", "header_1"); }); builder.Services.AddHttpClient("FJUrls", config => { config.BaseAddress = new Uri(deviceEffectiveUrls.FJUrls); }); builder.Services.AddHttpClient("SXUrls", config => { config.BaseAddress = new Uri(deviceEffectiveUrls.SXUrls); }); builder.Services.AddHttpClient("PTUrls", config => { config.BaseAddress = new Uri(deviceEffectiveUrls.PTUrls); }); builder.Services.AddHttpClient("CPUrls", config => { config.BaseAddress = new Uri(deviceEffectiveUrls.CPUrls); }); builder.Services.AddHttpClient(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } string baseDir = app.Environment.ContentRootPath; ConfigHelper.SetValue("baseDir", baseDir); //app.UseHttpsRedirection(); //初始化db builder.Services.AddQuestDBSqlSugarDb(builder.Configuration, app.Environment); builder.Services.AddSqlSugarDb(builder.Configuration, app.Environment); //app.Urls.Add("http://0.0.0.0:8002"); app.UseSession().UseCookiePolicy(); app.UseStaticFiles(); app.UseResponseCompression(); app.UseRouting(); //FastReport 暂时不用。与razor编译冲突。 需要卸载Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 这个然后安装 // FastReport.OpenSource FastReport.OpenSource.Export.PdfSimple FastReport.OpenSource.Web //app.UseFastReport(); app.UseAuthorization(); app.MapRazorPages(); //app.UseCors(option => option.AllowAnyOrigin().WithMethods("GET", "POST").WithHeaders("token")); app.UseCors("CorsPolicy"); //app.UseEndpoints(endpoints => //{ // endpoints.MapControllerRoute( // name: "default", // pattern: "{controller=Home}/{action=Index}/{id?}"); // endpoints.MapControllerRoute( // name: "area", // pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); //}); app.UseMiddleware(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "areas", pattern: "{area:exists}/{controller}/{action}/{id?}", defaults: new { controller = "Home", action = "Index" }); endpoints.MapControllerRoute( name: "default", pattern: "{controller}/{action}/{id?}", defaults: new { controller = "Home", action = "Index" }); endpoints.MapRazorPages(); }); app.Run();