我目前有一个ajax请求设置,用于向我的mvc 4项目中的web api发送"PUT"请求。我的请求能够进入api上的方法,但参数始终为null。有什么想法吗?我还检查了PUT请求的执行情况,它确实为每个表单控件发送了一个键/值对字符串。这是我的代码:
Web Api方法(选择始终为空)
public void Put([FromBody]string selection)
{
}
更新:
我忘了自己在调试。我已经确认,当您序列化一个表单时,参数被命名为"selection"。请再看一眼。
Ajax调用:
$.ajax({
type: "PUT",
url: urlPrefix + "api/file/Manipulate",
data: $("#frmManipulate").serialize(),
contentType: "application/json; charset=utf-8",
dataType: "json",
statusCode: {
204: function (jqXHR) {
alert("No file(s)/Directory(s) were selected.");
}
}
}).done(function () {
location.reload();
});
它为空,因为您没有传递它:
data: { val1 : "test", val2 : "test2"}
尝试:
data: { selection : "something" }
它为null,因为asp.net web api不知道如何将{ val1 : "test", val2 : "test2"}
反序列化为字符串。您可以使用DTO方法将这些信息传递给操作,例如:
在webapi项目中,添加这样一个类:
public class InfoDTO
{
public string val1 { get; set; }
public string val2 { get; set; }
// other properties if you need
}
并更改您的看跌期权操作以获得以下类型的参数:
public void Put([FromBody]InfoDTO info)
{
// use 'info' object
}
您的客户端javascript可以使用相同的代码。