2013-11-02 23 views
2

的Web API可以让我捕捉到一个POST请求的主体在JObject:的Web API - JObject从URI

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

    } 

任何解决方法在这里?

回答

3

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

  1. 传递您的数据作为查询字符串参数,如GET请求传统上完成的,并改变你的方法单独接受这些参数,或在普通班(POCO)。
  2. 将您的GET方法更改为接受字符串而不是JObject,然后使用JSON.Net手动将其反序列化。 JObject obj = JObject.Parse(data);
  3. 如果您感觉雄心勃勃,您可能可以实现自定义联编程序来执行此操作。

我的建议是选项1.传统上,GET方法只是为了查找某些东西,所以您应该只是传递ID和简单的查询选项。将JSON数据传递给URL是很不寻常的。另外,URL的长度可能会受到某些浏览器的限制。如果您发现需要传递JSON数据,请改为使用POST(或PUT)。

+0

对所有请求使用POST结束。本来希望能够在语义上正确的时候使用GET,但是鉴于我们的API是动态生成的,我需要一种让GET参数也是动态的方式(因此JObject) –