| using WIDESEA_Core.Helper; | 
| using WIDESEA_Core.Extensions; | 
| using WIDESEA_Core.Middlewares; | 
| using System.Reflection; | 
| using WIDESEA_Core.Filter; | 
| using Newtonsoft.Json.Converters; | 
| using Newtonsoft.Json.Serialization; | 
| using Newtonsoft.Json; | 
| using System.Text; | 
| using Microsoft.AspNetCore.Mvc.Controllers; | 
| using Microsoft.Extensions.DependencyInjection.Extensions; | 
| using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; | 
| using WIDESEA_Core; | 
| using WIDESEA_Core.BaseServices; | 
| using Autofac.Extensions.DependencyInjection; | 
| using Autofac; | 
| using WIDESEA_WMSServer.Filter; | 
| using WIDESEA_Core.Authorization; | 
| using WIDESEA_Core.Core; | 
| using Autofac.Core; | 
| using Microsoft.AspNetCore.Builder; | 
| using WIDESEA_Core.HostedService; | 
|   | 
| var builder = WebApplication.CreateBuilder(args); | 
|   | 
| builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()).ConfigureContainer<ContainerBuilder>(builder => | 
| { | 
|     builder.RegisterModule<AutofacModuleRegister>();//´øÓнӿڲãµÄ·þÎñ×¢Èë | 
|     builder.RegisterModule<AutofacPropertityModuleReg>();// | 
| }).ConfigureAppConfiguration((hostingContext, config) => | 
| { | 
|     hostingContext.Configuration.ConfigureApplication(); | 
|     config.Sources.Clear(); | 
|     config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: false); | 
| }); ; | 
| builder.ConfigureApplication(); | 
|   | 
|   | 
| // 2¡¢ÅäÖ÷þÎñ | 
| builder.Services.AddSingleton(new AppSettings(builder.Configuration));//×¢²á | 
| builder.Services.AddAllOptionRegister();//¶ÁÈ¡ÅäÖÃÎļþ | 
| builder.Services.AddMemoryCacheSetup();//»º´æ | 
| builder.Services.AddWebSocketSetup(); | 
| builder.Services.AddSqlsugarSetup();//SqlSugar Æô¶¯·þÎñ | 
| builder.Services.AddDbSetup();//Db Æô¶¯·þÎñ | 
| builder.Services.AddInitializationHostServiceSetup();//Ó¦Óóõʼ»¯·þÎñ×¢Èë | 
| builder.Services.AddHostedService<PermissionDataHostService>();//Ó¦Óóõʼ»¯·þÎñ×¢Èë | 
| builder.Services.AddAutoMapperSetup(); | 
|   | 
| builder.Services.AddCorsSetup(); | 
|   | 
| builder.Services.AddMiniProfilerSetup(); | 
|   | 
| builder.Services.AddSwaggerSetup(); | 
|   | 
| builder.Services.AddHttpContextSetup(); | 
|   | 
|   | 
| builder.Services.AddMvc(options => | 
| { | 
|     options.Filters.Add(typeof(ApiAuthorizeFilter)); | 
|     options.Filters.Add(typeof(ActionExecuteFilter)); | 
| }); | 
|   | 
| builder.Services.AddAuthorizationSetup(); | 
|   | 
| builder.Services.AddIpPolicyRateLimitSetup(builder.Configuration);//IPLimitÏÞÁ÷ Æô¶¯·þÎñ | 
|   | 
| builder.Services.AddScoped<UseServiceDIAttribute>(); | 
|   | 
| builder.Services.AddSession(); | 
|   | 
| builder.Services.AddHttpClient(); | 
|   | 
| builder.Services.AddControllers(o => | 
| { | 
|     o.Filters.Add(typeof(GlobalExceptionsFilter));//È«¾ÖÒì³£ | 
| }) | 
| .AddNewtonsoftJson(options => | 
| { | 
|     options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize; | 
|     //options.SerializerSettings.ContractResolver = new DefaultContractResolver(); | 
|     options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver(); | 
|     options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; | 
|     options.SerializerSettings.NullValueHandling = NullValueHandling.Include; | 
|     options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local; | 
|     options.SerializerSettings.Converters.Add(new StringEnumConverter()); | 
| }); | 
| // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle | 
| builder.Services.AddEndpointsApiExplorer(); | 
|   | 
| builder.Services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>()); | 
| Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); | 
|   | 
|   | 
| var app = builder.Build(); | 
|   | 
| // 3¡¢ÅäÖÃÖмä¼þ | 
| app.UseMiniProfiler();//ÐÔÄÜ·ÖÎöÆ÷ | 
| app.ConfigureApplication();//ÅäÖÃÎļþ | 
| app.UseApplicationSetup();//Æô¶¯ÅäÖà | 
|   | 
| app.UseAllServicesMiddle(builder.Services); | 
|   | 
| app.UseSession(); | 
| //if (app.Environment.IsDevelopment()) | 
| { | 
|     //todo | 
|     app.UseSwaggerAuthorized(); | 
|     app.UseSwaggerMiddle(() => Assembly.GetExecutingAssembly().GetManifestResourceStream("WIDESEA_WMSServer.index.html") ?? throw new Exception("WIDESEA_WMSServer.index.htmlÎļþ")); | 
| }//ÅжÏÊÇ·ñÐèÒª´ò¿ªswagger | 
|   | 
| app.UseIpLimitMiddle(); | 
| app.UseApiLogMiddleware(); | 
| //todo | 
| //app.UseRecordAccessLogsMiddle(); | 
|   | 
| app.UseCors(AppSettings.Get(new string[] { "Cors", "PolicyName" })); | 
|   | 
| DefaultFilesOptions defaultFilesOptions = new DefaultFilesOptions(); | 
| defaultFilesOptions.DefaultFileNames.Clear(); | 
| defaultFilesOptions.DefaultFileNames.Add("index.html"); | 
| app.UseDefaultFiles(defaultFilesOptions); | 
| app.UseMiddleware<HttpRequestMiddleware>(); | 
| app.UseStaticFiles(); | 
| app.UseCookiePolicy(); | 
| app.UseStatusCodePages(); | 
|   | 
| app.UseRouting(); | 
|   | 
| app.UseAuthentication(); | 
| app.UseAuthorization(); | 
|   | 
| app.MapControllers(); | 
|   | 
| app.Run(); |