23

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

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

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

有人有解决方案吗?

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

4

1 回答 1

56

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

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

请参阅此处RestRequest的课程代码。

以下是RestSharp 文档的内容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或者失败了,创建一个具有不同主体的对象的新副本。

于 2013-05-27T08:32:24.353 回答