发送Post请求至API时遇AutoMapper映射配置缺失异常求助
解决AutoMapperMappingException: 缺少类型映射配置或不支持的映射问题
问题根源
AutoMapper无法自动完成CreateTask到Tasks的类型转换,因为没有显式配置两者的映射规则,同时你的服务层代码存在语法和变量使用错误。
修复步骤
1. 添加AutoMapper映射配置
创建一个继承自Profile的配置类,定义CreateTask到Tasks的映射规则:
public class TaskMappingProfile : Profile { public TaskMappingProfile() { // 配置CreateTask到Tasks的映射,属性名一致时无需额外配置 CreateMap<CreateTask, Tasks>() .ForMember(dest => dest.Id, opt => opt.Ignore()); // Id为数据库自增字段,忽略映射 } }
在项目的依赖注入配置中(.NET 6+在Program.cs)注册AutoMapper及该配置:
builder.Services.AddAutoMapper(typeof(TaskMappingProfile));
2. 修正服务层代码错误
你的服务层代码存在多处语法和逻辑错误,修正后的完整代码如下:
public class UserService { // 将IMapper和DbContext声明为类的私有字段,通过构造函数注入 private readonly IMapper _mapper; private readonly YourDbContext _context; public UserService(IMapper mapper, YourDbContext context) { _mapper = mapper; _context = context; } public void CreateTask(CreateTask model) { // 执行模型映射 var taskEntity = _mapper.Map<Tasks>(model); // 将实体添加到数据库上下文并保存 _context.Tasks.Add(taskEntity); _context.SaveChanges(); } }
错误说明:
- 原代码将
private IMapper _mapper;写在方法内部,属于语法错误,应移至类级别 - 映射后的变量名与后续添加到上下文的变量名不匹配(
blessingvsTask),修正为统一的变量名 - 缺少构造函数注入
IMapper和数据库上下文,导致_mapper和_context未初始化
验证
重新启动API,发送原JSON请求:
{ "UserId": 2, "Task": "test" }
此时AutoMapper会根据配置完成CreateTask到Tasks的映射,成功写入数据库。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

