[英]How to access the HTTP request body using RestSharp?
我正在用 C# .NET 3.5 构建一个 RESTful API 客户端。
我首先开始使用旧的HttpWebClient
(和HttpWebResponse
)构建它,我可以做任何我想做的事情。 我很高兴。 我唯一遇到的问题是 JSON 响应的自动反序列化。
所以,我听说了一个名为 RestSharp (104.1) 的很棒的库,它简化了 RESTful API 客户端的开发,并自动反序列化 JSON 和 XML 响应。 我在上面切换了所有代码,但现在我意识到我不能做我可以用HttpWebClient
和HttpWebResponse
做的事情,比如访问和编辑原始请求正文。
任何人都有解决方案?
编辑:我知道如何设置请求正文(使用request.AddBody()
),我的问题是我想获取此请求正文字符串,对其进行编辑,然后在请求中重新设置它(更新请求正文上的飞)
请求正文是一种参数。 要添加一个,您可以执行以下操作之一...
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
类的代码。
这是ParameterType.RequestBody
上的RestSharp 文档必须说的内容:
如果设置了这个参数,它的值将作为请求的正文发送。 参数的名称被忽略,额外的 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
对象的新副本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.