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

Epo*_*poc 21 c# rest client .net-3.5 restsharp

我正在使用C#.NET 3.5构建RESTful API客户端.

我第一次开始用好的HttpWebClient(和HttpWebResponse)来构建它,我可以做任何我想做的事.我很高兴.我唯一坚持的是JSON响应的自动反序列化.

所以,我听说过一个名为RestSharp(104.1)的精彩库,它可以简化RESTful API客户端的开发,并自动反序列化JSON和XML响应.我打开它在我的所有代码,但现在我知道我不能做的事情,我可以做HttpWebClientHttpWebResponse,就像访问和编辑原始请求主体.

有人有解决方案吗?

编辑:我知道如何设置请求体(带request.AddBody()),我的问题是我想获取此请求体字符串,编辑它,并在请求中重新设置它(动态更新请求体)

dav*_*mos 49

请求体是一种参数.要添加一个,你可以做其中一个......

req.AddBody(body);
req.AddBody(body, xmlNamespace);
req.AddParameter("text/xml", body, ParameterType.RequestBody);
req.AddParameter("application/json", body, ParameterType.RequestBody);
Run Code Online (Sandbox Code Playgroud)

要检索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";
}
Run Code Online (Sandbox Code Playgroud)

或者失败,RestRequest使用不同的主体创建对象的新副本.

  • 在这里,您可以简单地执行.FirstOrDefault(λ)而不是.Where(lambda).FirstOrDefault()。 (2认同)
  • 如果你想要 JSON:`req.JsonSerializer.Serialize(request.Parameters[1])` (2认同)