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 查询调用。

有人可以帮助我,我做错了什么吗?

谢谢。

4

2 回答 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

于 2012-05-08T21:34:57.377 回答
6

问题是getJSON执行GET对服务器的请求。要传入整个对象,您必须执行一个POSTrequest

GET 的情况下,您传递给 jQuery Ajax 调用的 JavaScript 对象通常会转换为 URL 编码参数,然后可以由您的服务器端方法单独获取,例如

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

});

在你的服务器端

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

相反,如果要传输整个对象,则应将 ajax 调用作为 POST 执行,例如

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

并且您的服务器端方法必须采用具有Titletype 属性的对象String

我的博文在这里也可能有帮助

于 2012-05-08T05:49:58.423 回答