|
|
using DS.Module.Core;
|
|
|
using DS.Module.Core.Filters;
|
|
|
using DS.Module.Core.Helpers;
|
|
|
using FluentValidation.AspNetCore;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
using Newtonsoft.Json;
|
|
|
using Newtonsoft.Json.Serialization;
|
|
|
using System;
|
|
|
|
|
|
namespace DS.Module.Core.ServiceExtensions;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 基础服务
|
|
|
/// </summary>
|
|
|
public static class DsAppWebInstall
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 将模块服务添加到依赖注入服务容器中
|
|
|
/// </summary>
|
|
|
/// <param name="services">依赖注入服务容器</param>
|
|
|
/// <returns></returns>
|
|
|
public static IServiceCollection AddAppWebInstal(this IServiceCollection services)
|
|
|
{
|
|
|
if (services == null) throw new ArgumentNullException(nameof(services));
|
|
|
|
|
|
//注册http请求服务
|
|
|
services.AddHttpClient();
|
|
|
services.AddControllers(options =>
|
|
|
{
|
|
|
options.Filters.Add<ApiUserFilter>();
|
|
|
// 204预检查过滤
|
|
|
//options.Filters.Add<FegCrosFilter>();
|
|
|
//全局异常过滤
|
|
|
options.Filters.Add<GlobalExceptionsFilter>();
|
|
|
//全局操作日志
|
|
|
options.Filters.Add<OperationLogFilter>();
|
|
|
|
|
|
options.SuppressAsyncSuffixInActionNames = false;
|
|
|
//关闭不可为空引用类型的属性
|
|
|
options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = true;
|
|
|
})
|
|
|
.ConfigureApiBehaviorOptions(options =>
|
|
|
{
|
|
|
//SuppressModelStateInvalidFilter =true时,会关闭默认模型验证过滤器。[ApiController] 默认自带有400模型验证,且优先级比较高,如果需要自定义模型验证,则需要先关闭默认的模型验证。
|
|
|
options.SuppressModelStateInvalidFilter = false;
|
|
|
//使用自定义模型验证
|
|
|
options.InvalidModelStateResponseFactory = (context) =>
|
|
|
{
|
|
|
var errors = context.ModelState
|
|
|
.Where(e => e.Value.Errors.Count > 0)
|
|
|
.Select(e => e.Value.Errors.First().ErrorMessage)
|
|
|
.ToList();
|
|
|
var result = DataResult<object>.Failed(string.Join("|", errors));
|
|
|
|
|
|
return new JsonResult(result);
|
|
|
};
|
|
|
})
|
|
|
//全局配置Json序列化处理
|
|
|
.AddNewtonsoftJson(options =>
|
|
|
{
|
|
|
//CustomContractResolver 是我们自定义的解析器
|
|
|
options.SerializerSettings.ContractResolver = new CustomContractResolver();
|
|
|
// // 首字母小写(驼峰样式)
|
|
|
// options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
|
|
|
// 时间格式化
|
|
|
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
|
|
|
// 忽略循环引用
|
|
|
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
|
|
|
// 忽略空值
|
|
|
// options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
|
|
|
})
|
|
|
;
|
|
|
//添加FluentValidation验证
|
|
|
services.AddFluentValidationAutoValidation();
|
|
|
|
|
|
return services;
|
|
|
}
|
|
|
} |