我目前有一个ajax请求设置,用于向我的mvc 4项目中的web api发送“PUT”请求。我的请求能够进入api上的方法,但参数始终为null。有什么想法吗?我还检查PUT请求是否已执行,它确实为每个表单控件发送一串键/值对。这是我的代码:
Web Api方法(选择始终为空)
public void Put([FromBody]string selection)
{
}
更新
我忘记了我正在做一些自己的调试。我已经确认,当您序列化表单时,param被命名为“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();
});
答案 0 :(得分:1)
它是null因为你没有传递它:
data: { val1 : "test", val2 : "test2"}
尝试:
data: { selection : "something" }
答案 1 :(得分:0)
它是null,因为asp.net web api不知道如何将{ val1 : "test", val2 : "test2"}
反序列化为字符串。您可以使用DTO approuch将这些信息传递给操作,样本:
在web api项目中,添加如下类:
public class InfoDTO
{
public string val1 { get; set; }
public string val2 { get; set; }
// other properties if you need
}
并更改您的put操作以获取此类型的参数:
public void Put([FromBody]InfoDTO info)
{
// use 'info' object
}
您的客户端javascript可以使用相同的代码。