1

我目前有一个 ajax 请求设置来向我的 mvc 4 项目中的 web api 发送“PUT”请求。我的请求能够进入 api 上的方法,但参数始终为空。任何想法为什么?我还检查了 PUT 请求的执行情况,它确实为每个表单控件发送了一串键/值对。这是我的代码:

Web Api 方法(选择始终为空)

public void Put([FromBody]string selection)
{
}

更新:

我忘了我自己在做一点调试。我已经确认,当您序列化表单时,参数被命名为“选择”。请再看看。

阿贾克斯调用:

$.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();
});
4

2 回答 2

1

它是空的,因为你没有通过它:

data: { val1 : "test",  val2 : "test2"}

尝试:

data: { selection : "something" }
于 2013-12-04T19:32:19.447 回答
0

它是空的,因为 asp.net web api 不知道如何将其反序列化为{ val1 : "test", val2 : "test2"}字符串。您可以使用DTO方法将这些信息传递给操作,例如:

在 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 可以保持相同的代码。

于 2013-12-04T19:34:09.867 回答