0

基於this,爲我的Web API項目,我在客戶端使用此代碼:爲什麼Post操作失敗?

private void AddDepartment() 
{ 
    int onAccountOfWally = 42; 
    string moniker = "Billy Bob"; 
    Cursor.Current = Cursors.WaitCursor; 
    try 
    { 
     string uri = String.Format("http://platypi:28642/api/Departments/{0}/{1}", onAccountOfWally, moniker); 
     var webRequest = (HttpWebRequest)WebRequest.Create(uri); 
     webRequest.Method = "POST"; 
     var webResponse = (HttpWebResponse)webRequest.GetResponse(); 
     if (webResponse.StatusCode != HttpStatusCode.OK) 
     { 
      MessageBox.Show(string.Format("Failed: {0}", webResponse.StatusCode.ToString())); 
     } 
    } 
    finally 
    { 
     Cursor.Current = Cursors.Default; 
    } 
} 

我達到我在這行代碼中設置的斷點:

var webResponse = (HttpWebResponse)webRequest.GetResponse(); 

.. 。但當我在F10它(或嘗試到F11進去)時,出現「遠程服務器返回所需錯誤(411)長度」

長度需要什麼,Compilerobot?!?

這是我在服務器的存儲庫類方法:

public void Post(Department department) 
{ 
    int maxId = departments.Max(d => d.Id); 
    department.Id = maxId + 1; 
    departments.Add(department); 
} 

的控制器代碼:

public void Post(Department department) 
{ 
    deptsRepository.Post(department); 
} 

我GET方法做工精細; POST是下一個步驟,但我已經把腳趾釘到了目前爲止。

回答

1

您尚未發佈任何內容。

當你這樣做時,你需要提供內容的長度。有點像這樣:

byte[] yourData = new byte[1024]; // example only .. this will be your data 

webRequest.ContentLength = yourData.Length; // set Content Length 

var requestStream = webRequest.GetRequestStream(); // get stream for request 

requestStream.Write(yourData, 0, yourData.Length); // write to request stream 
+0

根據這裏的答案:http://stackoverflow.com/questions/20646715/how-can-i-call-a-web-api-post-method,我需要這條線代碼: var webResponse =(HttpWebResponse)webRequest.GetResponse(); 在這種情況下我真的需要一個RequestStream(發佈數據)嗎? –

+0

是的。 'GetResponse'用於從您的請求中檢索_response_。 'GetRequestStream'獲取用於爲請求寫入數據的'Stream'。如果你想發送一些請求,你需要寫信給它。 –