Web API参数始终为null

时间:2015-06-25 12:50:09

标签: c# asp.net json asp.net-web-api fiddler

我的Web API中有以下方法:

[AcceptVerbs("POST")]
public bool MoveFile([FromBody] FileUserModel model)
{
    if (model.domain == "abc")
    {
        return true;
    }
    return false;
}

FileUserModel定义为:

public class FileUserModel
{
    public string domain { get; set; }
    public string username { get; set; }
    public string password { get; set; }
    public string fileName { get; set; }
}

我试图通过Fiddler调用它,但每当我这样做时,模型总是设置为null。在Fiddler中,我已经将作曲家发送到使用POST,url就在那里并且正确,因为Visual Studio中的调试器在调用时会中断。请求我设置为:

User-Agent: Fiddler 
Host: localhost:46992 
Content-Length: 127 
Content-Type: application/json

请求正文:

"{
  "domain": "dcas"
  "username": "sample string 2",
  "password": "sample string 3",
  "fileName": "sample string 4"
}"

但是每当我在调试器遇到断点时运行composer时,它总是显示model为null。

3 个答案:

答案 0 :(得分:1)

您在发送的请求中错过了,。此外,由于包含双引号,您实际上发送的是JSON字符串,而不是JSON对象。删除引号并添加逗号应该可以解决您的问题。

{
    "domain": "dcas", // << here
    "username": "sample string 2",
    "password": "sample string 3",
    "fileName": "sample string 4"
}

此外,由于您要发布模型,因此您不需要[FromBody]属性。

[AcceptVerbs("POST")]
public bool MoveFile(FileUserModel model)
{
    if (model.domain == "abc")
    {
        return true;
    }
    return false;
}

那应该没问题。有关详细信息,请参阅this blog

答案 1 :(得分:0)

你需要像下面那样进行ajax调用

$(function () {
    var FileUserModel =    { domain: "dcas", username: "sample string 2", 
            password: "sample string 3", fileName: "sample string 4"};
    $.ajax({
        type: "POST",
        data :JSON.stringify(FileUserModel ),
        url: "api/MoveFile",
        contentType: "application/json"
    });
});

别忘了将内容类型标记为json和服务器端api代码

[HttpPost]
public bool MoveFile([FromBody] FileUserModel model)
{
    if (model.domain == "abc")
    {
        return true;
    }
    return false;
}

Sending HTML Form Data in ASP.NET Web API

答案 2 :(得分:0)

您遇到的问题是您使用周围的双引号发布JSON数据。删除它们,它应该工作。

同时修复丢失的逗号:

c = [1  4  9; 
     16 25 36; 
     0  0  0]