2016-11-22 17 views
0

の.NET Framework 4.5.2、.Asp.NETウェブAPI 5.2.3、5.1.1 AutoMapperMapper.Map <タスク<IEnumerableを<Address>>、タスク<IEnumerableを<AddressView>>()

私は、次のASPを持っていますAddressController上の.NET MVC WebApiアクションメソッド。

Mapper.Initialize(cfg => cfg.CreateMap<Address, AddressModel>()); 
Mapper.AssertConfigurationIsValid(); 

[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がAutoMapperとしてGlobal.asax.csに設定されている

public async Task<IEnumerable<Address>> GetAlladdressesAsync() 
{ 
    var data = from a in _context.Addresses.Take(10) 
       orderby a.City 
       select a; 

    return await data.ToListAsync(); 
} 

です:あなたは、以下のサービスメソッドに見ることができるように私のテストのために私は唯一の10のレコードを返します

また、AutoMapperを設定しようとしました。

Mapper.Initialize(cfg => cfg.CreateMap<Task<IEnumerable<Address>>, Task<IEnumerable<AddressModel>>>()); 
Mapper.AssertConfigurationIsValid(); 

最初の構成ではソリューションが起動しますが、ブラウザーからGetAllAsync()メソッドを呼び出すと、F12 Developer Tools/NetworkingのResponse本体に次のエラーメッセージが表示されます。

{"message" \\ \ \ \ \マッピングタイプ:\ 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、バージョン= 4.0.0.0、Culture =ニュートラル、PublicKeyToken = b77a5c561934e089]]> System.Threading.Tasks.Task 1[[System.Collections.Generic.IEnumerable 1 [[TestAspNetIdentity .Model.AddressModel、TestAspNetIdentity、Version = 1.0.0.0、Culture =ニュートラル、PublicKeyToken = null]]、mscorlib、バージョン= 4.0.0.0、Culture =ニュートラル、 AutoMapperの2番目の設定を試行すると、ソリューションが起動しますが、メソッドを呼び出すと、レスポンスまたは例外なしでリクエストが停止してしまいます。クライアントまたはサーバー上で実行され、ブラウザーは応答が不定ループで待機します。

Task<IEnumerable<MyTypeA>>Task<IEnumerable<MyTypeB>>にマップするには、AutoMapperをどのように設定して使用しますか? async-task-awaytの使い方でいくつかの基本的なエラーを作りますか?誰かが例を持っていますか? ありがとうございます。

よろしくタスクをマップしようとすべきではない エイドリアン

答えて

2

- タスクの結果を待って、それをマップ:

[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; 
} 

また、あなたがソースのタイプを指定する必要はありませんマッピング時。

関連する問題