我正在用C#.NET3.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
对象的新副本。