2014-12-31 116 views
2

我的javascript代碼:我的C#代碼如何正確發送PUT請求到webAPI應用程序?

$.ajax({ 
     type: "PUT", 
     url: "/api/WordsAPI/"+wordData.ID, 
     data: { word: wordData} 
    }); 

部分:

// PUT: api/WordsAPI/5 
    [ResponseType(typeof(void))] 
    public IHttpActionResult PutWord(int id, Word word) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     if (id != word.ID) 
     { 
      return BadRequest(); 
     } 

     [...] 
    } 

在VisualStudio中調試程序,我可以看到應用程序執行第二錯誤請求。服務器端變量「word」中的所有數據均爲空。我不知道爲什麼。 「id」變量是可以的,它存儲正確的ID。

在Firefox的JavaScript調試器中,一切似乎都沒有問題。 wordData不爲空(wordData.id正確發送到服務器),我可以看到所有數據都成功發送到服務器。

什麼可能是錯的?我該怎麼辦?

編輯:

在Firefox請求(這是由瀏覽器發送): enter image description here

+0

應該工作..嘗試改變'數據:{字:wordData}''到的數據:JSON.stringify(wordData )'並確保你的'wordData'與'Word word'具有相同的屬性 –

+0

你也可以用'[FromBody]'屬性標記'word' –

+0

我不確定「wordData是否具有與Word字相同的屬性」。我的意思是:在Word類中,我有一個包含DateTime值的屬性。在我的應用程序中,我將Word變量發送給客戶端,客戶端修改此數據並將其發送回服務器。我懷疑「DateTime」屬性實際上是服務器端的「字符串」。那我該怎麼辦? – Piotrek

回答

2

服務器端代碼對我來說工作正常。 但是,JavaScript應如下所示。

$.ajax({ 
     type: "PUT", 
     url: "/api/WordsAPI/"+wordData.ID, 
     data: wordData 
}); 

我假設wordDataObject與樣本定義

var wordData = { 
    ID: 5, 
    UsersLanguage: "string data" 
    // etc 
} 
1

我梅耶同意您需要添加[FromBody]標籤在Word類的前面API方法肯定。其次,Simoco說你需要確保你發送的wordData與你的Word模型具有相同的結構。

這意味着,如果你的類看起來像這樣

public class Word{ 
int id {get; set;} 
string someText {get; set;} 
} 

然後下你的話是從JavaScript的發送需要具有相同的結構

var word = {id : 1, someText: "text string"}; 

我也建議您在VS調試上確保被調用的方法。如果將鼠標懸停在Word參數上,可以看到正在拾取的內容。

+0

1.我已經添加[FromBody]仍然不起作用。 2.不要ModelState.IsValid檢查?如果是的話,它似乎是模型是好的... ... - – Piotrek

相關問題