繁体   English   中英

如何使用 RestSharp 访问 HTTP 请求正文?

[英]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 响应。 我在上面切换了所有代码,但现在我意识到我不能做我可以用HttpWebClientHttpWebResponse做的事情,比如访问和编辑原始请求正文。

任何人都有解决方案?

编辑:我知道如何设置请求正文(使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM