2017-01-16 3 views
0

私は、AngularJSアプリケーションがオブジェクト配列をPOSTリクエストを通じてWeb APIコントローラメソッドに送信しています。サーバーでは、私は次のメソッドの定義を持っている:Web APIコントローラがPOSTリクエストを通じてクライアントからnullデータを取得するのはなぜですか?

[HttpPost] 
[Route("Active")] 
public async Task<IHttpActionResult> Post(IList<Media> mediaFiles) 
{ 
    try 
    { 
     foreach (var file in mediaFiles) 
     { 
      await Task.Factory.StartNew(() => PublicData.SetInactiveMedia(file.Id, file.Active)); 
     } 
     return Ok(); 
    } 
    catch (ArgumentException e) 
    { 

     return BadRequest(e.Message); 
    } 
} 

は、私は、サーバーと対話するために、$リソースファクトリを使用します(しかし、私はまた、$ httpで試してみましたとは差が現れないことを言及する必要があり) 。これはメソッドです:

var activeMedia = $resource('/api/adminhotspotsmedia/active', { save: { method: 'POST' } }); 
var setActiveMedia = function (mediaFiles) { 
      activeMedia.save(mediaFiles); 
     } 

mediaFiles変数は絶対にサーバー上Mediaモデルに一致するオブジェクトの配列です。開発者コンソールで

私は、要求に関連付けられている。この要求ペイロードを見ることができます:

enter image description here

だから、配列をサーバーに取得しようとしているが、それはできません。サーバーは、オブジェクトのリストに対してヌル値を取得します。私が使って試してみましたことを追加します。

  • [FromBody]タグ
  • dynamic代わりの代わりに、問題が解決しないIList<Media>

IList<Media>

  • IList<object>。どうなり得るか?

  • +0

    インタフェースを使用しないでくださいを使用することができます。あなたがカスタムモデルバインダーを持っていない限り、モデルバインダーはそれをどうするべきか分かりません。バインドする具体的なクラスが必要なので、具体的なオブジェクトを使用してください。実際の 'List 'または 'Media [] 'の配列 – Nkosi

    答えて

    0

    デフォルトでは、モデルバインダーは、期待することがわかっているカスタムモデルバインダーと目的の動作が分かっていない限り、インターフェイスの処理方法を知りません。

    別の方法としては、実際のList<Media>

    [HttpPost] 
    [Route("Active")] 
    public async Task<IHttpActionResult> Post(List<Media> mediaFiles) { ... } 
    

    または配列Media[]

    [HttpPost] 
    [Route("Active")] 
    public async Task<IHttpActionResult> Post(Media[] mediaFiles) { ... } 
    
    +0

    を使ってください。私はその動作を理解していなかったので、リスト前からIListに切り替えました。今私は両方のあなたの提案を試してみて、彼らは動作しません。 – Ionna

    関連する問題