1

Web クライアントを使用して、WP8 アプリケーションから GET Web API の基準として整数配列を渡そうとしています。ダウンロード文字列とアップロード文字列の両方を試しましたが、条件を API に渡すことができませんでした

以下は私の現在のコードです

Web API コントローラ メソッド

public IQueryable<Items> GetItemByColour([FromUri] int[] Colour)
{
var query = from a in db.Items
        where Colour.Contains(a.ItemsColour)
        select a;

return query;}

WP8 アプリケーション

void btnGetData_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            WebClient webClient = new WebClient();
            int[] arr = new int[3];
            arr[0] = 1;
            arr[1] = 2;
            arr[2] = 3;

            Uri uri = new Uri("http://ip:Port/api/Items/?Colour="+arr);
            webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted);
            webClient.DownloadStringAsync(uri);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    private void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        try
        {
            List<Items> items = JsonConvert.DeserializeObject<List<Items>>(e.Result);
            foreach (Item em in items)
            {
                int phoneID = em.ItemID;
                string phoneName = em.ItemName;
                lstPhones.Items.Add(phoneId + " " + phoneName);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
4

1 に答える 1

0

ASP.NET WebApi は、サービス アクションの定義方法が同じであれば、同じ名前のパラメーターを配列に自動的に変換します。したがって、URL が //ip:port/api/Items/?Colour=1&Colour=2 の場合、配列はサーバー側Colourと等しくなります。int[2] { 1, 2 }

次のようにするとうまくいくはずです。

 int[] arr = new int[3] { 1, 2, 3 };
 System.Text.StringBuilder colourParams = new System.Text.StringBuilder();

 for (int i = 0; i < arr.Length; i++)
 {
     colourParams.Append("Colour=").Append(arr[i]);
     if (i != arr.Length - 1)
     {
         colourParams.Append("&");
     }
 }

 Uri uri = new Uri("http://ip:port/api/Items/?" + colourParams.ToString());
于 2013-07-28T19:54:26.043 に答える