ch06 验证与映射小结
本章介绍数据校验和 AutoMapper
的使用.
Minimal API
中没有 内置的 基于注解的类型校验. 作为替代方案, 有两个库可以使用:
MiniValidation
FluentValidation
测试后发现:
- 基于控制器 API, 如果传入对象类型不符合要求. 直接不会进入端点处理函数. 如何不符合类型注解的约束也不会进入端点处理函数.
Minimal API
, 即使只传入空对象{}
也会进入端点处理函数.
实际开发中, 不会将实体类型直接返回给客户端.
- 一方面为了保护底层数据结构.
- 另一方面, 存在一个映射层, 在后台数据结构发生变化的时候, 前端不用进行修改.
常用的库为 AutoMapper
.
MiniValidation
MiniValidation
依旧依赖于类型注解.
安装包:
dotnet add package MiniValidation --version 0.9.0
使用方法:
按照类型注解为类型属性提交校验约束.
Minimal API
总会进入端点函数. 使用方法:bool isValid = MiniValidator.TryValidate(对象, out var errors); if (!isValid) { return Results.ValidationProblem(errors); }
Nuget: https://www.nuget.org/packages/MiniValidation
新的包提供了 ASP.NET Core 的扩展:
dotnet add package MinimalApis.Extensions
减少了自行判断的过程, 使用该扩展得到的效果与控制器中, 进行校验的效果一样: 不会进入端点处理函数. 使用步骤:
安装包
区别 .NET 6 和 .NET 7+ 的版本. 6 中需要调用
builder.Services.AddEndpointsMetadataProviderApiExplorer()
如果是7+ 的版本, 则不用变化.
如果是 .NET 6 则使用
Validated<T>
来封装参数, 如果是 .NET7+ 则在Map
系列方法后再调用WithParameterValidation
方法即可.类库依旧在变化中, 使用方法也在变化.
NUGET: https://www.nuget.org/packages/MinimalApis.Extensions
FluentValidation
使用 MiniValidation
验证与模型强耦合, 使用 FluentValidation
可以将模型与验证解耦.
AutoMapper
进行实体模型到返回给客户端对象的映射, 一般:
- 自定义映射过程, 会比较麻烦, 需要一个个自行编写
- 使用
AutoMapper
来自动处理映射
安装依赖包: dotnet add package AutoMapper --version 12.0.1
或 ASP.NET Core 依赖包: dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection
文档地址: https://docs.automapper.org/en/stable/
基本使用步骤:
安装包.
从
Profile
类派生, 在构造函数中创建映射, 并定义类型与类型的转换规则 (如果有必要).CreateMap<TSource, TDestination>
如果需要反向映射使用
ReverseMap()
方法. 如果需要投影, 则使用ForMember
与MapFrom
方法.注册服务, 告诉
AutoMapper
需要处理的程序集.build.Services.AddAutoMapper(typeof(Program).Assembly);
也可以手动添加
Type
类型的数据 (Profile
派生类), 或多个程序集.使用
IMapper
进行依赖注入.mapper.Map<T>(obj);
使用应注意性能的问题 (内部支持递归属性, 并使用了反射).