2016-01-15 198 views
0

我正在構建一個用於同步數據並拉下對象的小型Web API,它的工作效果很好,但是無論我嘗試了什麼,推動對象都不起作用。傳遞變量Null

編輯,以反映一些變化:

這裏是我的控制器:

[System.Web.Mvc.HttpPost] 
    public void UpdateTasks([FromBody] string s) 
    { 
     Console.WriteLine(s); 
    } 

這裏是我的客戶端代碼:

HttpContent c = new StringContent("1234"); 
     HttpClient client = new HttpClient(); 
     c.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 
     client.BaseAddress = new Uri("http://localhost/QAQC_SyncWebService/Tasks/UpdateTasks/"); 
     var resp = client.PostAsync(client.BaseAddress, c).Result; 

我可以得到一個值但如果我把它在URI中,但單獨的字符串內容似乎不起作用。

+1

集內容類型:應用/ JSON,還使用[FromBody]串 – neo

+0

之前我所做的:c.Headers.ContentType =新MediaTypeHeaderValue( 「應用程序/ JSON」);它仍然是空的。 – Herrozerro

+0

很可能您的PUT請求被網絡服務器阻止。看看這個線程之一:http://stackoverflow.com/questions/10906411/asp-net-web-api-put-delete-verbs-not-allowed-iis-8 http://stackoverflow.com/問題/ 28579073/how-to-get-put-and-delete-verbs-to-work-with-webapi-on-iis – serhiyb

回答

2

嘗試

[HttpPut] 
public void UpdateTasks([FromBody]string s) 
{ 
    Console.WriteLine(s); 
} 

還請注意:

  1. [FromBody如=值 參數必須被編碼剩餘的最後一關是該Web API要求您以特定格式傳遞[FromBody]參數。這就是爲什麼我們的值參數在之前的例子中爲null,即使我們用[FromBody]修飾了方法的參數。 除了大多數客戶端和服務器端框架期望的相當標準的key = value編碼之外,Web API的模型聯編程序期望在POST主體中找到[FromBody]值,而不需要鍵名。換句話說,而不是key = value,它正在尋找=值。 到目前爲止,這部分是將原始類型發送到Web API POST方法中最令人困惑的部分。一旦你瞭解它,但不是太糟糕,但非常不直觀,不可發現。

http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/

+1

謝謝!這有幫助。 – Herrozerro

1

您正在初始化client.BaseAddress的行看起來有點偏離。

HttpContent c = new StringContent("1234"); 
HttpClient client = new HttpClient(); 
c.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 
client.BaseAddress = new Uri("http://localhost/QAQC_SyncWebService/Tasks/UpdateTasks"); 
var resp = client.PutAsync(client.BaseAddress, c).Result; 

PutAsync方法期待完整的URI,而不僅僅是一個方法。在這裏閱讀更多:https://msdn.microsoft.com/en-us/library/hh138168(v=vs.118).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

+0

它確實沒有改變任何東西,它仍然在控制器中進行調試,但參數爲空。參數是否需要命名? – Herrozerro