ASP.NET WebAPI - 怎样在 $.getJSON 中传递对象

3

我有一个以下的ASP.NET WebAPI控件:

public SomeObject GetBenchMarkData(Comment comment)
        {
            //do stuff
        }

在客户端,我正在尝试以下操作:
var comment = { ID: 0, Text: $('#text').val(), Author: $('#author').val(), Email: $('#email').val(), GravatarUrl: '' };
            var json = JSON.stringify(comment);
            $.getJSON("api/MintEIQAPI/" + json,

问题在于GetBenchMarkData操作从上面的getJSON查询中没有被调用。

有谁能帮我,我做错了什么吗?

谢谢。

2个回答

17

默认情况下,如果你要通过GET请求传递一个复杂类型,你需要在操作参数上加上FromUri属性。

在客户端:

$.get('api/movies/test',
      {Name:'Henrique', Age:'24'}, 
      function (res) {
           console.log(res);
      }
);

在控制器上:

public void Get([FromUri] Customer c)
{
    ...
}
这样,您告诉WebApi从查询字符串反序列化参数。另外请注意,您不需要对传递给服务器的对象进行字符串化。

这篇博客文章解释了WebApi和MVC模型绑定的区别:http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx


这绝对是更好的做法。谢谢您的发布。 - Micah

6
问题在于getJSON向服务器执行GET请求。要传递整个对象,你需要执行POST请求

GET请求情况下,传递给jQuery Ajax调用的JavaScript对象通常会被转换为URL编码参数,然后可以由服务器端方法单独接收。

$.ajax({
  url: "/someurl/getbenchmarkdata",
  data: JSON.stringify({ filterValue: "test" }),
  type: "GET"
  ...

});

同时,在您的服务器端执行以下操作:

public SomeObject GetBenchMarkData(String filterValue)
{
   ...
}

如果您想传输整个对象,您应该使用POST方法进行ajax调用,例如:

$.ajax({
    url: "/someurl/benchmarkdata",
    type: "POST",
    data: JSON.stringify({ title: "My title"}),
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    ...
});

你的服务器端方法必须接受一个带有属性 Title,类型为 String 的对象。

这里可能会有帮助的是我的博客文章


谢谢@Juri,这个方法不起作用,我需要在Action中包含HTTPPOST吗? - Nil Pun
@nilpun 更新了我的帖子并使其更加清晰(希望如此):) - Juri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接