【发布时间】:2015-12-13 02:23:24
【问题描述】:
我们正在创建一个 angularjs 应用程序的 Web.Api 应用程序。 Web.Api 返回一个 json 结果。
第一步是获取数据:
public List<DataItem>> GetData()
{
return Mapper.Map<List<DataItem>>(dataRepository.GetData());
}
这就像一个魅力。然后我们将数据仓库设为异步,并更改为使用它的代码。
public List<DataItem>> GetData()
{
return Mapper.Map<List<DataItem>>(dataRepository.GetDataAsync().Result);
}
仍然没有问题。现在我们想让我的 Web.Api 完全异步,所以我们将其更改为:
public async Task<List<DataItem>> GetData()
{
return await Mapper.Map<Task<List<DataItem>>>(dataRepository.GetDataAsync());
}
此时 Automapper 感到困惑。首先,我们有以下映射器规则: 映射器.CreateMap();
这一直有效,直到 web api 方法变得完全异步。异常说它缺少来自
的地图 Task<ICollection<Data>> to Task<ICollection<DataItem>>.
映射器已更改为
Mapper.CreateMap<Task<List<Data>>, Task<List<DataItem>>>();
在验证配置时,它抱怨无法映射 Result。我们应该如何配置映射?
【问题讨论】:
-
你能改成:
var data = await dataRepository.GetDataAsync(); return Mapper.Map<List<DataItem>>(data);吗?类似于这里的:stackoverflow.com/questions/24827417/… -
但是控制器本身不再异步了?
-
该方法将被标记为异步并在正文中包含等待,因此您不会丢失映射并且仍然是异步的
标签: c# async-await automapper