using Furion; using Myshipping.Core; using Myshipping.Core.Service; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using System; using System.Net; using System.Net.Http; using System.Text.Encodings.Web; using System.Text.Json; using System.Text.Json.Serialization; using System.Text.Unicode; using Yitter.IdGenerator; using Furion.Templates; using Furion.Logging; using System.Collections.Generic; using Newtonsoft.Json.Serialization; using Newtonsoft.Json; using Myshipping.Application.ConfigOption; using Myshipping.Application.Event; using Myshipping.Core.MQ; namespace Myshipping.Web.Core; [AppStartup(9)] public class Startup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddBStyle(m => m.UseDefault()); services.AddConfigurableOptions(); services.AddConfigurableOptions(); services.AddConfigurableOptions(); services.AddConfigurableOptions(); services.AddConfigurableOptions(); services.AddConfigurableOptions(); services.AddConfigurableOptions(); services.AddConfigurableOptions(); services.AddConfigurableOptions(); services.AddConfigurableOptions(); services.AddConfigurableOptions(); #region 上传文件大小限制 long maxRequestBodySize = Convert.ToInt64(App.Configuration["MaxRequestBodySize"]); services.Configure(options => { options.Limits.MaxRequestBodySize = maxRequestBodySize; }); services.Configure(options => { options.MaxRequestBodySize = maxRequestBodySize; }); services.Configure(o => { o.MultipartBodyLengthLimit = maxRequestBodySize; }); #endregion services.AddResponseCompression(); services.SqlSugarScopeConfigure(); services.AddJwt(enableGlobalAuthorize: true); services.AddCorsAccessor(); services.Configure(option => { option.MultipartBodyLengthLimit = 20 * 1024 * 1024; }); // 配置远程请求 services.AddRemoteRequest(option => { // 配置天气预报GZIP option.AddHttpClient("wthrcdn", c => { c.BaseAddress = new Uri("http://wthrcdn.etouch.cn/"); }).ConfigurePrimaryHttpMessageHandler(_ => new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip }); }); services.AddControllersWithViews() .AddMvcFilter() .AddMvcFilter() .AddMvcFilter() .AddInjectWithUnifyResult() .AddNewtonsoftJson(options => { // 首字母小写(驼峰样式) options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); // 时间格式化 options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; // 忽略循环引用 options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; // 忽略空值 options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; }); services.AddViewEngine(); services.AddSignalR(); // 设置雪花id的workerId,确保每个实例workerId都应不同 var workerId = ushort.Parse(App.GetOptions().WorkerId); YitIdHelper.SetIdGenerator(new IdGeneratorOptions { WorkerId = workerId }); // 开启自启动定时任务 App.GetService().StartTimerJob(); // 获取运行类型 var runType = App.GetConfig("RunType"); // 注册EventBus服务 services.AddEventBus(builder => { // 注册 Log 日志订阅者 builder.AddSubscriber(); //钉钉消息 builder.AddSubscriber(); //发送订舱同步数据给客户订舱系统 builder.AddSubscriber(); //日志压缩清理 builder.AddSubscriber(); //公司及用户信息的同步 builder.AddSubscriber(); //运踪 builder.AddSubscriber(); //更新库存 builder.AddSubscriber(); //重要提醒任务 builder.AddSubscriber(); //客户订舱:消息推送 if (runType is CommonConst.RUN_TYPE_CUST or CommonConst.RUN_TYPE_DJY) { builder.AddSubscriber(); } //客户订舱:发送租户和用户数据到运营端往来单位 if (runType is CommonConst.RUN_TYPE_CUST) { builder.AddSubscriber(); } //扣费 builder.AddSubscriber(); }); // 客户订舱客户端模式 与 标准模式(自用):订阅大简云公司用户信息同步 if (runType is CommonConst.RUN_TYPE_CUST or CommonConst.RUN_TYPE_NORMAL) { // 公司员工变动消息队列服务 services.AddHostedService(); } } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseMiddleware(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } // 添加状态码拦截中间件 app.UseUnifyResultStatusCodes(); //app.UseHttpsRedirection(); // 强制https app.UseStaticFiles(); app.UseRouting(); app.UseCorsAccessor(); app.UseAuthentication(); app.UseAuthorization(); app.UseResponseCompression(); app.UseInject(string.Empty); app.UseEndpoints(endpoints => { endpoints.MapHub("/hubs/chathub"); endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); } }