2015-05-19 72 views
1

我想發佈JSON數據到web api,這兩個項目都在我的本地機器上運行。在這篇文章中的方法發佈JSON對象HTTPClient。收到的值是空的WEB API ASP MVC

using (var client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri(@"http://localhost:53818/"); 
    var result = client.PostAsync("api/values", new StringContent(data, Encoding.UTF8, "application/json")).Result; 
    string resultContent = result.Content.ReadAsStringAsync().Result; 
    Console.WriteLine(resultContent); 
} 

接收的值是NULL

public HttpResponseMessage Post([FromBody]string value) 
{ 
    return new HttpResponseMessage(HttpStatusCode.Created); 
} 

編輯----------- 所以我設法弄清楚什麼問題了。我已經取代這行代碼

client.PostAsync("api/values", new StringContent(data, Encoding.UTF8, "application/json")).Result; 

與以下和它的工作,如果有人將發佈的解釋,我會很感激

var response = client.PostAsJsonAsync("api/values", data).Result; 
+0

什麼'數據'看起來像從你的第一個片段(你提出請求)? – Jasen

+0

我的數據是在另一個方法中生成的JSON文件,並傳遞給這個數據,正確生成數據 –

+0

那麼數據的命名方式是您的WebAPI操作簽名會自動綁定? – Jasen

回答

1

這是becouse的WebAPI並不擅長的原始序列化當你發送'Content-Type'頭部爲application/json時,框架試圖用設置的Json序列化程序序列化內容並且不能夠,這就是爲什麼你在變量中得到空值的原因。

您可以

  1. 更改參數的從字符串到JToken類型或
  2. 包括處理純文本的媒體類型格式化(見https://stackoverflow.com/a/29914360/1422608
+0

我改變了參數的類型爲JToken,但現在StringContent拋出一個異常 –

+0

@IliaAptsiauri拋出了什麼異常? – evilpilaf

+0

它說沒有重寫方法存在,我試圖使用data.toString()基本上它是一樣的,它不起作用 –

0

因爲你叫和您的方法預計。改變你的電話價值或改變方法簽名的價值,在這種情況下會更有意義