2016-11-18 10 views
0

次のコードがあります。なぜインライン変数として配列やリストを直接作ることができないのですか?以下のようなクラス内の配列やリストでうまく動作します。C#ASP.NET Web API 2は、AngularJSのインパラメータとして整数の配列を受け取ります

要求ペイロード:

{"ids":[1,2,4]} 

角度:

send: { 
    method: 'POST', 
    url: controllerPath + '/send', 
    isArray: true 
} 

agreementResource.send({ ids: vm.agreementIds }).$promise.then(function (data) { 

}); 

のC#:

//Works 
[HttpPost] 
[Route("send")] 
[Authorize(Roles = "Admin")] 
public IHttpActionResult Send(AgreementIdsViewModel ids) 
{ 
    foreach (var id in ids.Ids) 
    { 

    } 
} 


//Does not work 
[HttpPost] 
[Route("send")] 
[Authorize(Roles = "Admin")] 
public IHttpActionResult Send(int[] ids) 
{ 
    foreach (var id in ids) 
    { 

    } 
} 

public class AgreementIdsViewModel 
{ 
    public int[] Ids { get; set; } 
} 

私はので、私はそれが可能であるべきだと思う、それはGETリクエストを介して行うことができます知っています。

GetSend([FromUri] int[] ids) 

し、要求を送信します。

/Send?ids=1&ids=2&ids=3 
+0

([FromBody] INT [] IDS) ' – Fabio

+0

は私が@Fabioに同意し、また、あなたのコントローラのメソッド内のブレークポイントを設定し、Request.Form.AllKeys –

+0

のように、この中にすべてのものを通過することができ送る'公共IHttpActionResultを使用しますこれは残念ながらうまくいきませんでした。 – Ogglas

答えて

0

を以下に従ってください。角度サービスで

send: { 
    method: 'POST', 
    url: controllerPath + '/send', 
    } 

大きな問題は、あなたのペイロードに存在しています。次のようになります。

[1,2,3,4] 

idsを追加しないでください。あなたはこのようにそれを作りたい場合は、lodashを使用するか、次のようにアンダースコアができます。

var ids = []; 

_.map(file, function (item, index) { 
       ids.push(item.name); 
      }); 

にWeb APIは問題ありませんし、それは正しいです:

[HttpPost] 
[Route("send")] 
[Authorize(Roles = "Admin")] 
public IHttpActionResult Send(int[] ids) 
{ 
    foreach (var id in ids) 
    { 

    } 
} 

とあなたの角度コントローラどこにサービスを呼び出すかは次のようになります。

agreementResource.send({ ids }).$promise.then(function (data) {} 

あなたのために働くかどうか教えてください。

+0

私はこの作業をするために 'lodash'や' underscore'のようなライブラリを追加したくありません。 – Ogglas

+0

それは重要な問題です。それはあなたのために簡単にするだけです。要点は、あなたのペイロードが[1,2,3,4]のように見え、これが{"ids":[1,2,4]}ではないということです –

関連する問題