我的javascript代码:
$.ajax({
type: "PUT",
url: "/api/WordsAPI/"+wordData.ID,
data: { word: wordData}
});
我的部分C#代码:
// 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调试器中,我可以看到该应用程序执行第二个BadRequest。变量" word"中的所有数据在服务器端是null。我不知道为什么。 " ID"变量没问题,它存储了正确的ID。
在Firefox的javascript调试器中,一切似乎都没问题。 wordData不是null(wordData.id被正确发送到服务器),我可以看到所有数据都已成功发送到服务器。
可能有什么不对?我该怎么办?
修改
firefox中的请求(这是浏览器发送的内容):
答案 0 :(得分:2)
服务器端代码对我来说很好。 但是,JavaScript应如下所示。
$.ajax({
type: "PUT",
url: "/api/WordsAPI/"+wordData.ID,
data: wordData
});
我假设wordData
是带有样本定义的Object
var wordData = {
ID: 5,
UsersLanguage: "string data"
// etc
}
答案 1 :(得分:1)
我同意Vsevolod您需要在API方法的Word类前面添加[FromBody]
标记。其次,Simoco说你需要确保你发送的wordData与你的Word模型具有相同的结构。
意思是如果你的课看起来像这样
public class Word{
int id {get; set;}
string someText {get; set;}
}
然后你从javascript发送的Word需要具有相同的结构
var word = {id : 1, someText: "text string"};
我还建议你在VS上调试方法以确保它被调用。如果将鼠标悬停在Word参数
上,则可以看到正在拾取的内容