我在下面有一个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查询调用。
有人可以帮助我,我做错了吗?
感谢。
答案 0 :(得分:17)
默认情况下,如果要通过GET传递复杂类型,则需要使用FromUri属性修饰action参数。
在客户端:
$.get('api/movies/test',
{Name:'Henrique', Age:'24'},
function (res) {
console.log(res);
}
);
在控制器上:
public void Get([FromUri] Customer c)
{
...
}
这样你就告诉WebApi从查询字符串反序列化参数。另请注意,您不要对传递给服务器的对象进行stringfy。
此博客文章解释了WebApi和MVC模型绑定的不同之处: http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx
答案 1 :(得分: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)
{
...
}
相反,如果你想传输整个对象,你应该把ajax调用作为POST来执行,比如
$.ajax({
url: "/someurl/benchmarkdata",
type: "POST",
data: JSON.stringify({ title: "My title"}),
dataType: "json",
contentType: "application/json; charset=utf-8",
...
});
您的服务器端方法必须使用类型为Title
的属性String
的对象。