如何在ASP.NET Core 6 Web API中配置AutoMapper抛出自定义映射异常?
在ASP.NET Core 6中配置AutoMapper抛出自定义异常
1. 定义自定义异常类
先创建你需要的自定义异常类型,示例如下:
public class MappingFailureException : Exception { public MappingFailureException(string message) : base(message) { } public MappingFailureException(string message, Exception innerException) : base(message, innerException) { } }
2. 修改AutoMapper注册配置
替换原有的services.AddAutoMapper(Assembly.GetExecutingAssembly());,通过自定义配置项实现映射失败时抛出异常:
若使用Startup类
services.AddAutoMapper(config => { // 开启严格映射检查,可根据业务调整空值相关规则 config.AllowNullDestinationValues = false; config.AllowNullCollections = false; // 为所有映射添加后置验证逻辑 config.ForAllMaps((map, exp) => { exp.AfterMap((src, dest) => { var context = new ResolutionContext(map.ConfigurationProvider, src, dest, map); var validationResult = map.ConfigurationProvider.Validate(context); if (!validationResult.IsValid) { var errorDetails = string.Join("; ", validationResult.Errors.Select(e => e.ErrorMessage)); throw new MappingFailureException($"映射执行失败:{errorDetails}", validationResult.Exception); } }); }); }, Assembly.GetExecutingAssembly());
若使用.NET 6顶级语句的Program.cs
builder.Services.AddAutoMapper(config => { config.AllowNullDestinationValues = false; config.AllowNullCollections = false; config.ForAllMaps((map, exp) => { exp.AfterMap((src, dest) => { var context = new ResolutionContext(map.ConfigurationProvider, src, dest, map); var validationResult = map.ConfigurationProvider.Validate(context); if (!validationResult.IsValid) { var errorDetails = string.Join("; ", validationResult.Errors.Select(e => e.ErrorMessage)); throw new MappingFailureException($"映射执行失败:{errorDetails}", validationResult.Exception); } }); }); }, Assembly.GetExecutingAssembly());
3. 关键说明
AllowNullDestinationValues和AllowNullCollections用于控制空值是否允许映射到目标对象,可根据实际业务需求调整开关状态。- 通过
ForAllMaps为所有映射规则统一添加后置检查,验证映射上下文的有效性,一旦验证不通过就抛出自定义异常。 - 验证结果
validationResult包含具体的错误信息,可按需提取更细节的内容整合到异常提示中。
内容的提问来源于stack exchange,提问作者Buda Gavril
相关产品推荐
相关产品推荐

