using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_Core.Extensions;
|
using WIDESEAWCS_Core.Middlewares;
|
using System.Reflection;
|
using WIDESEAWCS_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 WIDESEAWCS_Core;
|
using WIDESEAWCS_Core.BaseServices;
|
using Autofac.Extensions.DependencyInjection;
|
using Autofac;
|
using WIDESEAWCS_WCSServer.Filter;
|
using WIDESEAWCS_Core.Authorization;
|
using WIDESEAWCS_Core.Core;
|
using WIDESEAWCS_QuartzJob.Seed;
|
using Autofac.Core;
|
using WIDESEAWCS_QuartzJob.QuartzExtensions;
|
using Microsoft.AspNetCore.Builder;
|
using WIDESEAWCS_Server.HostedService;
|
using WIDESEAWCS_Server.Filter;
|
using WIDESEAWCS_Tasks.OHT;
|
using Baidu.Aip.Face;
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()).ConfigureContainer<ContainerBuilder>(builder =>
|
{
|
builder.RegisterModule(new AutofacModuleRegister());
|
builder.RegisterModule(new QuartzJobAutofacModuleRegister());
|
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.AddSqlsugarSetup();//SqlSugar ��������
|
//builder.Services.AddInitializationHostServiceSetup();//Ӧ�ó�ʼ������ע��
|
builder.Services.AddHostedService<SeedDataHostedService>();
|
builder.Services.AddDbSetup();//Db ��������
|
|
builder.Services.AddScoped<QuartzJobCreateDataTabel>();
|
builder.Services.AddHostedService<QuartzJobDataTableHostedService>();
|
|
builder.Services.AddWebSocketSetup();
|
|
builder.Services.AddHostedService<WebSocketHostService>();
|
|
builder.Services.AddAutoMapperSetup();
|
|
builder.Services.AddCorsSetup();
|
|
builder.Services.AddMiniProfilerSetup();
|
|
builder.Services.AddSwaggerSetup();
|
|
builder.Services.AddJobSetup();//������� ��������
|
|
builder.Services.AddHttpContextSetup();
|
|
builder.Services.AddHostedService<QuartzJobHostedService>();
|
|
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);
|
//FaceAI.Face.sdk_init(null);//人脸识别
|
app.UseSession();
|
//if (app.Environment.IsDevelopment())
|
{
|
//todo
|
app.UseSwaggerAuthorized();
|
app.UseSwaggerMiddle(() => Assembly.GetExecutingAssembly().GetManifestResourceStream("WIDESEAWCS_Server.index.html") ?? throw new Exception("δ�ҵ�WIDESEAWCS_Server.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();
|