如何将PUT请求正确发送到Web API应用程序?

时间:2014-12-31 14:49:27

标签: javascript c# asp.net asp.net-web-api

我的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中的请求(这是浏览器发送的内容): enter image description here

2 个答案:

答案 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参数

上,则可以看到正在拾取的内容