【问题标题】:ASP.NET WebAPI - how to pass object with $.getJSONASP.NET WebAPI - 如何使用 $.getJSON 传递对象
【发布时间】:2012-05-16 14:41:14
【问题描述】:

我在下面有一个 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 查询调用。

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

谢谢。

【问题讨论】:

    标签: jquery asp.net-mvc asp.net-web-api


    【解决方案1】:

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

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

    $.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 的对象。

    我的blog post might be of help here too

    【讨论】:

    • 谢谢@Juri,我应该包含HTTPPOST for Action吗?
    • @nilpun 更新了我的帖子并使其更加清晰(希望如此):)
    【解决方案2】:

    默认情况下,如果您通过 GET 传递复杂类型,则需要使用 FromUri 属性装饰 action 参数。

    在客户端:

    $.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

    【讨论】:

    • 绝对是解决这个问题的更好方法。感谢发帖
    猜你喜欢
    • 2013-03-26
    • 2019-08-04
    • 2016-04-01
    • 2015-12-31
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2012-11-07
    • 2013-02-10
    相关资源
    最近更新 更多