You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 00:38:13