2017-08-02 13 views
2

クライアントアプリケーションがWeb APIコントローラにアクセスしてデータセットを取得すると、コントローラはパラメータとしてリストを持ちます。クライアントからWeb APIへの文字列のリストを渡す

static void Main(string[] args) 
{ 

    Program p = new Program(); 
    p.getdata().Wait(); 
} 


public async Task getdata() 
{ 
    List<string> datelist = new List<string>(); 
    datelist.Add("12/05/2017"); 
    datelist.Add("14/05/2017"); 
    datelist.Add("18/05/2017"); 

    HttpClient host = new HttpClient(); 
    host.BaseAddress = new Uri("http://localhost/widgetApi/"); 
    host.DefaultRequestHeaders.Clear(); 
    host.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 
    StringContent content = new StringContent(JsonConvert.SerializeObject(datelist), Encoding.UTF8, "application/json"); 



    HttpResponseMessage response = await host.GetAsync("api/dataAccessApi?"+ datelist); 
    response.EnsureSuccessStatusCode(); 
    if(response.IsSuccessStatusCode) 
    { 

     Console.Read(); 
    } 
} 

コントローラは

public HttpResponseMessage Get([FromBody] List<string> dates) 
{ 
    ..... function going here 
} 

である私の質問は、私は、Web APIにdatelistを渡すことができる方法です??

+0

GET要求はありません。このように見て、あなたは、クエリ文字列を構築し、UrlEncodeでウリ

var dates = datelist.Select(d => string.Format("dates={0}", UrlEncode(d)); var query = string.Join("&", dates); var uri = "api/dataAccessApi?" + query; 

にそれを追加する必要がありますBODYでは、クエリ文字列値を使用できます。 '?'日付= '{UrlEncoded date}'&dates = '{UrlEncoded date}' ... ... – Nkosi

答えて

3

GETリクエストにはBODYがありません。クエリ文字列値を使用できます。クライアント側では?dates='{UrlEncoded date}'&dates='{UrlEncoded date}'...

public HttpResponseMessage Get([FromUri] List<string> dates) { 
    //..... function going here 
} 

/// <summary>Escape RFC3986 String</summary> 
static string UrlEncode(string stringToEscape) { 
    return stringToEscape != null ? Uri.EscapeDataString(stringToEscape) 
     .Replace("!", "%21") 
     .Replace("'", "%27") 
     .Replace("(", "%28") 
     .Replace(")", "%29") 
     .Replace("*", "%2A") : string.Empty; 
} 
+0

Get([FromUri]リストの日付)コントローラの日付はemptyArrayを返します。 – christopher

関連する問題