Mapper.Map <任务>,任务>()
.NET框架4.5.2,.Asp.NET网页API 5.2.3,5.1.1 AutoMapperMapper.Map <任务<IEnumerable的<Address>>,任务<IEnumerable的<AddressView>>()
我有以下ASP地址控制器上的.NET MVC WebApi操作方法。对于我的测试,我只返回10条记录,你可以在下面的服务的方法,请参阅:
[Route("api/Address/GetAllAsync")]
[HttpGet]
public async Task<IEnumerable<AddressModel>> GetAllAsync()
{
AddressService service = new AddressService(new DataContext());
Task<IEnumerable<Address>> data = service.GetAllAddressesAsync();
var addressList = Mapper.Map<Task<IEnumerable<Address>>, Task<IEnumerable<AddressModel>>>(data);
return await addressList;
}
service.GetAllAddressesAsync是
public async Task<IEnumerable<Address>> GetAlladdressesAsync()
{
var data = from a in _context.Addresses.Take(10)
orderby a.City
select a;
return await data.ToListAsync();
}
AutoMapper在Global.asax.cs中配置为:
Mapper.Initialize(cfg => cfg.CreateMap<Address, AddressModel>());
Mapper.AssertConfigurationIsValid();
我也尝试配置AutoMapper像
Mapper.Initialize(cfg => cfg.CreateMap<Task<IEnumerable<Address>>, Task<IEnumerable<AddressModel>>>());
Mapper.AssertConfigurationIsValid();
第一次配置解决方案启动,但从浏览器调用GetAllAsync()方法时,响应正文(在F12 Developer Tools/Networking中)显示以下错误消息:
{“message”:“发生。“,”exceptionMessage“:”缺少类型映射配置或不支持映射。\ r \ n \ r \ n映射类型:\ r \ n任务1 -> Task
1 \ r \ nSystem.Threading.Tasks.Task 1[[System.Collections.Generic.IEnumerable
1 [[DataAccess.Address ,DataAccess,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]],mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]] - > System.Threading.Tasks.Task 1[[System.Collections.Generic.IEnumerable
1 [[TestAspNetIdentity .Models.AddressModel,TestAspNetIdentity,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]],mscorlib,Version = 4.0.0.0,Culture = neutral, PublicKeyToken =“b77a5c561934e089”]“,”exceptionType“:”AutoMapper.AutoMapperMappingException“,”stackTrace“:”
当尝试AutoMapper的第二个配置时,解决方案启动,但调用方法时,请求死亡,没有任何响应或异常客户端或服务器上,并且浏览器在无限循环中等待响应。
我应该如何配置和使用AutoMapper来将Task<IEnumerable<MyTypeA>>
映射到Task<IEnumerable<MyTypeB>>
?我是否使用async-task-awayt用法做出一些基本的错误?有人有一个例子吗? 谢谢你的帮助。
问候 阿德里安
你不应该试图映射一个任务 - 等待任务的结果,映射的是:
[Route("api/Address/GetAllAsync")]
[HttpGet]
public async Task<IEnumerable<AddressModel>> GetAllAsync()
{
AddressService service = new AddressService(new DataContext());
IEnumerable<Address> data = await service.GetAllAddressesAsync();
var addressList = Mapper.Map<IEnumerable<AddressModel>>(data);
return addressList;
}
而且,你不需要指定源类型映射时。