2

Web API 允许我在 JObject 中捕获 POST 请求的主体:

    $.post('/api/Query/DoSomething', { Foo: "one", Bar: 4 });

    public string Post(JObject data)
    {
        // data is populated
    }

但是,相同的技术不适用于获取请求和 URI 参数。

    $.get('/api/Controller', { Foo : "one", Bar : 4 });

    public string Get([FromUri]JObject data)
    {
        // data is empty

    }

这里有什么解决方法吗?

4

1 回答 1

3

它不起作用,因为 GET 请求没有正文,因此没有内容类型。因此,Web API 不知道您的 URL 中有 JSON。你有几个选择:

  1. 将您的数据作为查询字符串参数传递,就像传统上在 GET 请求中所做的那样,并更改您的方法以单独接受这些参数,或者在常规类 (POCO) 中接受这些参数。
  2. 更改您的 GET 方法以接受字符串而不是 JObject,然后使用 JSON.Net 手动反序列化它,例如JObject obj = JObject.Parse(data);
  3. 如果您有雄心壮志,您也许可以实现一个自定义活页夹来做到这一点。

我的建议是选项 1。传统上,GET 方法只是用于查找某些内容,因此您实际上应该只传递 ID 和简单的查询选项。在 URL 中传递 JSON 数据是不常见的。此外,某些浏览器可能会限制 URL 的长度。如果您发现需要传递 JSON 数据,请改用 POST(或 PUT)。

于 2013-11-02T22:35:09.723 回答