/// <summary> /// 注册Controllers /// </summary> public virtual void AddControllers() { _services.AddControllers(options => options.Filters.Add(typeof(CustomExceptionFilterAttribute))) .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new DateTimeConverter()); options.JsonSerializerOptions.Converters.Add(new DateTimeNullableConverter()); //options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore options.JsonSerializerOptions.Encoder = SystemTextJsonHelper.GetAdncDefaultEncoder(); }); }
/// <summary> /// Controllers 注册 /// Sytem.Text.Json 配置 /// FluentValidation 注册 /// ApiBehaviorOptions 配置 /// </summary> public virtual void AddControllers() { _services.AddControllers(options => options.Filters.Add(typeof(CustomExceptionFilterAttribute))) .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new DateTimeConverter()); options.JsonSerializerOptions.Converters.Add(new DateTimeNullableConverter()); options.JsonSerializerOptions.Encoder = SystemTextJsonHelper.GetAdncDefaultEncoder(); //该值指示是否允许、不允许或跳过注释。 options.JsonSerializerOptions.ReadCommentHandling = JsonCommentHandling.Skip; //dynamic与匿名类型序列化设置 options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; //dynamic options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase; //匿名类型 options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; }) .AddFluentValidation(cfg => { //Continue 验证失败,继续验证其他项 cfg.ValidatorOptions.CascadeMode = FluentValidation.CascadeMode.Continue; // Optionally set validator factory if you have problems with scope resolve inside validators. // cfg.ValidatorFactoryType = typeof(HttpContextServiceProviderValidatorFactory); }); //参数验证返回信息格式调整 _services.Configure <ApiBehaviorOptions>(options => { //关闭自动验证 //options.SuppressModelStateInvalidFilter = true; //格式化验证信息 options.InvalidModelStateResponseFactory = (context) => { var problemDetails = new ProblemDetails { Detail = context.ModelState.GetValidationSummary("<br>") , Title = "参数错误" , Status = (int)HttpStatusCode.BadRequest , Type = "https://httpstatuses.com/400" , Instance = context.HttpContext.Request.Path }; return(new ObjectResult(problemDetails) { StatusCode = problemDetails.Status }); }; }); }
/// <summary> /// Controllers 注册 /// Sytem.Text.Json 配置 /// FluentValidation 注册 /// ApiBehaviorOptions 配置 /// </summary> public virtual void AddControllers() { _services.AddControllers(options => options.Filters.Add(typeof(CustomExceptionFilterAttribute))) .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new DateTimeConverter()); options.JsonSerializerOptions.Converters.Add(new DateTimeNullableConverter()); options.JsonSerializerOptions.Encoder = SystemTextJsonHelper.GetAdncDefaultEncoder(); //该值指示是否允许、不允许或跳过注释。 options.JsonSerializerOptions.ReadCommentHandling = JsonCommentHandling.Skip; //dynamic与匿名类型序列化设置 options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; //dynamic options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase; //匿名类型 options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; }) .AddFluentValidation(cfg => { //Continue 验证失败,继续验证其他项 cfg.ValidatorOptions.CascadeMode = FluentValidation.CascadeMode.Continue; }); //参数验证返回信息格式调整 _services.Configure <ApiBehaviorOptions>(options => { //关闭自动验证 //options.SuppressModelStateInvalidFilter = true; //格式化验证信息 options.InvalidModelStateResponseFactory = (context) => { var result = new JsonResult(new { error = context.ModelState.GetValidationSummary("<br>") }) { StatusCode = (int)HttpStatusCode.BadRequest }; return(result); }; }); }