提问者:小点点

如何使用RestSharp访问HTTP请求体?


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

我最初开始使用旧的httpWebClient(和httpWebResponse)来构建它,我可以做我想做的任何事情。我很开心。我唯一关注的是JSON响应的自动反序列化。

因此,我听说了一个名为RestSharp(104.1)的优秀库,它简化了RESTful API客户机的开发,并自动反序列化JSON和XML响应。我在它上切换了所有代码,但现在我意识到我无法完成用httpWebClienthttpWebResponse可以完成的事情,比如访问和编辑原始请求主体。

有人有解决办法吗?

编辑:我知道如何设置请求主体(使用request.addbody()),我的问题是我想获取这个请求主体字符串,编辑它,然后在请求中重新设置它(动态更新请求主体)


共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的项。

请参见此处的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对象的新副本。