Asp.net web api 无法将接口映射到具有AutoMapper的类,但可以手动映射
我目前从事一个小型ASP.NET核心Web API项目。在我的“VehicleModelController”中,我有一个类“VehicleModel”: 在控制器中,我还有一种检索单车模型的方法:Asp.net web api 无法将接口映射到具有AutoMapper的类,但可以手动映射,asp.net-web-api,automapper,Asp.net Web Api,Automapper,我目前从事一个小型ASP.NET核心Web API项目。在我的“VehicleModelController”中,我有一个类“VehicleModel”: 在控制器中,我还有一种检索单车模型的方法: // GET api/<controller>/Guid [HttpGet("{id}")] public async Task<IActionResult> GetModelById(Guid id) { var model = a
// GET api/<controller>/Guid
[HttpGet("{id}")]
public async Task<IActionResult> GetModelById(Guid id)
{
var model = await Service.GetVehicleModelById(id);
if (model == null)
return NotFound();
var vehicleModel = new VehicleModelsController.VehicleModel()
{
Id = model.Id,
Name = model.Name,
VehicleMakeId = model.VehicleMakeId,
};
return Ok(vehicleModel);
}
当我在控制器中手动将IVehicleModel接口映射到VehicleModel类时,这一切都会起作用,正如您前面所看到的,但是当我尝试在控制器中使用AutoMapper进行映射时,就像这样:
var vehicleModel = AutoMapper.Mapper.Map<VehicleModelsController.VehicleModel>(model);
为什么会这样?为什么我不能对Automapper执行相同的操作,我已经手动完成了这些操作
我已在映射配置文件类中定义映射:
CreateMap<VehicleModelsController.VehicleModel, IVehicleModel>().ReverseMap();
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<VehicleModelsController.VehicleModel, IVehicleModel>().ReverseMap();
}
}
编辑#2
这正是我得到的错误:
从中,现在您可以传递包含automapper配置文件实现的程序集或该程序集中的任何类型
也提到
要与IServiceCollection实例和一个或多个程序集一起使用:
services.AddAutoMapper(assembly1, assembly2 /*, ...*/);
或标记类型:
services.AddAutoMapper(type1, type2 /*, ...*/);
因此,您可以将Startup.cs作为标记类型传递,如下所示
services.AddAutoMapper(typeof(Startup));
或包含Automapper实现类的程序集 我把你的代码复制粘贴到我的应用程序中,它就可以工作了。您的automapper配置有问题。该映射配置文件中定义的任何其他映射是否正常工作?能否显示您的自动映射类初始化?@MukeshModhvadiya我添加了itUpdate以更新您的启动代码以指出您的映射类services.AddAutoMapper(m=>m.AddProfile(new MappingProfile());让我知道它是否有效。不需要添加配置文件,只需传递程序集或类型。看见
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<VehicleModelsController.VehicleModel, IVehicleModel>().ReverseMap();
}
}
services.AddAutoMapper();
services.AddAutoMapper(assembly1, assembly2 /*, ...*/);
services.AddAutoMapper(type1, type2 /*, ...*/);
services.AddAutoMapper(typeof(Startup));