Ajax PUT请求Web Api

时间:2013-12-04 19:28:14

标签: ajax asp.net-mvc asp.net-web-api http-put

我目前有一个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();
});

2 个答案:

答案 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可以使用相同的代码。