【问题标题】:Web API - JObject from URIWeb API - 来自 URI 的 JObject
【发布时间】:2013-11-03 06:55:28
【问题描述】:

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

    }

这里有什么解决方法吗?

【问题讨论】:

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


    【解决方案1】:

    它不起作用,因为 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)。

    【讨论】:

    • 最终只对所有请求使用 POST。原本希望能够在语义正确的情况下使用 GET,但鉴于我们的 API 是动态生成的,我需要一种方法让 GET 参数也成为动态的(因此是 JObject)
    猜你喜欢
    • 2014-09-10
    • 1970-01-01
    • 2018-06-30
    • 2020-10-13
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 2018-04-28
    相关资源
    最近更新 更多