【问题标题】:How to access the HTTP request body using RestSharp?如何使用 RestSharp 访问 HTTP 请求正文?
【发布时间】:2013-05-22 00:33:29
【问题描述】:

我正在用 C# .NET 3.5 构建一个 RESTful API 客户端。

我首先开始使用旧的HttpWebClient(和HttpWebResponse)构建它,我可以做任何我想做的事情。我很高兴。我唯一遇到的问题是 JSON 响应的自动反序列化。

所以,我听说了一个名为 RestSharp (104.1) 的出色库,它简化了 RESTful API 客户端的开发,并自动反序列化 JSON 和 XML 响应。我在上面切换了我所有的代码,但现在我意识到我不能做我可以用 HttpWebClientHttpWebResponse 做的事情,比如访问和编辑原始请求正文。

谁有解决办法?

编辑:我知道如何设置请求正文(使用request.AddBody()),我的问题是我想获取此请求正文字符串,对其进行编辑,然后在请求中重新设置(更新即时请求正文)

【问题讨论】:

    标签: c# rest .net-3.5 client restsharp


    【解决方案1】:

    请求体是一种参数。要添加一个,您可以执行以下操作之一...

    req.AddBody(body);
    req.AddBody(body, xmlNamespace);
    req.AddParameter("text/xml", body, ParameterType.RequestBody);
    req.AddParameter("application/json", body, ParameterType.RequestBody);
    

    要检索 body 参数,您可以在 req.Parameters 集合中查找 Type 等于 ParameterType.RequestBody 的项目。

    查看RestRequesthere 的代码。

    这是RestSharp docs on ParameterType.RequestBody 必须说的话:

    如果设置了这个参数,它的值将作为正文发送 要求。参数的名称被忽略,其他的也被忽略 RequestBody 参数——只接受 1 个。

    RequestBody 仅适用于 POST 或 PUT 请求,因为只有它们实际上 发送正文。

    如果您也有 GetOrPost 参数,它们将覆盖 RequestBody – RestSharp 不会合并它们,而是会 扔掉 RequestBody 参数。

    要即时读取/更新 body 参数,您可以尝试:

    var body = req.Parameters.FirstOrDefault(p => p.Type == ParameterType.RequestBody);
    if (body != null)
    {
        Console.WriteLine("CurrentBody={0}", body.Value);
        body.Value = "NewBodyValue";
    }
    

    否则,请使用不同的主体创建 RestRequest 对象的新副本。

    【讨论】:

    • 太好了,谢谢!有完整的工作代码:pastebin.com/0c4bqPNW
    • 在这里,您可以简单地使用.Where([lambda]).FirstOrDefault() 而不是.FirstOrDefault([lambda])
    • 如果你想要 JSON:req.JsonSerializer.Serialize(request.Parameters[1])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2020-08-14
    • 1970-01-01
    • 2021-02-11
    • 2013-11-14
    • 2012-07-09
    相关资源
    最近更新 更多