ch06 验证与映射小结
本章介绍数据校验和 AutoMapper 的使用.
Minimal API 中没有 内置的 基于注解的类型校验. 作为替代方案, 有两个库可以使用:
MiniValidationFluentValidation
测试后发现:
- 基于控制器 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);
使用应注意性能的问题 (内部支持递归属性, 并使用了反射).