using DS.Module.Core; using DS.Module.Core.Extensions; using DS.Module.Core.Filters; using DS.Module.Core.Modules; using DS.Module.Jwt; using DS.Module.Log; using DS.Module.SqlSugar; using DS.Module.Swagger; using DS.Module.User; using DS.WMS.Core.DBSeed; using DS.WMS.Core.System.Dtos; using FluentValidation.AspNetCore; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; namespace DS.WMS.WebApi; /// /// 基础模块 /// [DSDependsOn( typeof(DependencyAppModule), typeof(NLogModule), typeof(SqlSugarModule), typeof(SwaggerModule), typeof(JwtModule), typeof(UserModule))] public class DSAppWebModule : DSAppModule { private string policyName = string.Empty; /// /// /// /// public override void ConfigureServices(ConfigureServicesContext context) { var service = context.Services; service.Configure(options => { // 禁用默认模型验证过滤器 options.SuppressModelStateInvalidFilter = true; }); service.AddControllersWithViews(options => { // 全局添加自定义模型验证过滤器 options.Filters.Add(); //全局异常过滤 options.Filters.Add(); // options.Filters.Add(typeof(GlobalExceptionsFilter)); options.SuppressAsyncSuffixInActionNames = false; //x.Filters.Add(); }) .AddFluentValidation(config => //添加FluentValidation验证 { var controllerAssemblies = new[] { typeof(UserLoginValidation).Assembly, }; // config.ImplicitlyValidateChildProperties = true; foreach (var assembly in controllerAssemblies) { config.RegisterValidatorsFromAssembly(assembly); } }) //全局配置Json序列化处理 .AddNewtonsoftJson(options => { //忽略循环引用 options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; //不使用驼峰样式的key // options.SerializerSettings.ContractResolver = new DefaultContractResolver(); //设置时间格式 options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; }); //跨域请求 policyName = AppSetting.Configuration["Cors:PolicyName"]; var corsUrl = AppSetting.Configuration["Cors:Url"]; service.AddCors(c => { c.AddPolicy(policyName, policy => { policy.WithOrigins(corsUrl .Split(",", StringSplitOptions.RemoveEmptyEntries).ToArray()) //policy.WithOrigins("http://localhost:5001")//支持多个域名端口,注意端口号后不要带/斜杆:比如localhost:8000/,是错的 .AllowAnyHeader().AllowAnyMethod().AllowCredentials(); //允许cookie; }); }); } /// /// /// /// public override void ApplicationInitialization(ApplicationContext context) { var applicationBuilder = context.GetApplicationBuilder(); if (!policyName.IsNullOrEmpty()) { applicationBuilder.UseCors(policyName); //添加跨域中间件 } applicationBuilder.UseRouting(); applicationBuilder.UseStaticFiles(); } }