Web API - 来自URI的JObject

时间:2013-11-02 21:20:50

标签: asp.net-web-api json.net

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

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

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

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

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

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

    }

这里有解决方法吗?

1 个答案:

答案 0 :(得分:3)

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

  1. 将您的数据作为查询字符串参数传递,就像传统上在GET请求中一样,并将您的方法更改为单独接受这些参数,或者在常规类(POCO)中。
  2. 将您的GET方法更改为接受字符串而不是JObject,然后使用JSON.Net手动反序列化,例如JObject obj = JObject.Parse(data);
  3. 如果您有野心,可以实现自定义活页夹来执行此操作。
  4. 我的建议是选项1.传统上,GET方法只是为了查找内容,所以你真的应该只传递ID和简单的查询选项。在URL中传递JSON数据是不常见的。此外,某些浏览器可能会限制URL的长度。如果您发现需要传递JSON数据,请改用POST(或PUT)。