2016-06-09 32 views
2

我正在使用一個使用HttpClient調用web api的asp.net應用程序。如何將Json數據作爲參數傳遞給使用HttpClient的web api

在web API控制器我傳遞兩個參數之一是int和第二個字符串。

下面是代碼:

public HttpResponseMessage Get(int submissionID, string jsonData) 
{ 

} 

這是工作的罰款沒有問題,當我傳遞一個int和使用一個字符串參數的HttpClient

下面是我的HttpClient代碼:

public void GetWebApiData(int fileID, String jsonData) 
{ 
    var client = new HttpClient(); 
    var task = client.GetAsync("http://localhost:1469/api/Smartling/" + fileID + "/"+jsonData) 
     .ContinueWith((taskwithresponse) => 
     { 
      var response = taskwithresponse.Result; 
      var jsonString = response.Content.ReadAsStringAsync(); 
      jsonString.Wait(); 
      var getVal = jsonString.Result; 

     }); 
    task.Wait(); 
} 

在上面的代碼中,如果我通過而不是json數據,它會給出錯誤響應代碼400錯誤請求。

相同我用jQuery ajax調用,它工作正常沒有問題。

如何傳遞JSON數據作爲參數?

+1

你能添加什麼jsonData看起來像一個例子。 –

+0

你可以檢查我的答案 –

回答

-1

也請使用 「字符串」,而不是在

公共無效GetWebApiData(INT的fileid,字符串jsonData)

「字符串」 類,如果不工作

請嘗試字符串化或SerializeObject()來在將數據作爲參數傳遞之前轉換該數據。

類似 JSON.stringify(jsonData); 或 JsonConvert.SerializeObject(jsonData);

+0

我用StringContent來反序列化我的json數據並且能夠調用web api,但現在的問題是如何從StringContent中獲取json數據? –

+0

JavaScriptSerializer serializer = new JavaScriptSerializer(); object obj = serializer.Deserialize (jsDat); – Arun

+0

jsDat是StringContent而不是字符串。請提供StringContent的代碼以獲取字符串中的值。 –

3

假設你有一個類

public class Sample 
{ 
    public string Value1 { get; set; } 
    public string Value2 { get; set; } 
} 

在客戶端

public async static Task<Boolean> GetWebApiData(int fileID,string jsonData) 
{ 
    var client = new HttpClient(); 
    Sample model = new Sample(); 
    model = Newtonsoft.Json.JsonConvert.DeserializeObject<Sample>(jsonData); 
    var response = await client.GetAsync(string.Format("http://sample.com/api/test/{0}?model.value1={1}&model.value2={2}", fileID ,model.Value1, model.Value2)); 
    if (response.StatusCode == HttpStatusCode.OK) 
     return true; 
    else 
     return false; 
} 

在服務器端

[HttpGet] 
public IHttpActionResult Get(int id,[FromUri]Sample model) 
{ 
    //do something 
    return Ok(); 
} 
相關問題