如何在RestSharp中向请求主体添加文本

18 浏览
0 Comments

如何在RestSharp中向请求主体添加文本

我正在尝试使用RestSharp来消费一个Web服务。到目前为止一切进展都很顺利(向John Sheehan和所有贡献者致敬!),但我遇到了一个问题。假设我想将XML以其已序列化的形式(即字符串)插入到RestRequest的主体中。有没有简单的方法可以做到这一点?似乎.AddBody()函数在后台进行序列化,所以我的字符串被转换成了

非常感谢任何帮助!

编辑:请求一个我当前代码的示例。请参见下面的代码 -

private T ExecuteRequest(string resource,
                            RestSharp.Method httpMethod,
                            IEnumerable parameters = null,
                            string body = null) where T : new()
{
    RestClient client = new RestClient(this.BaseURL);
    RestRequest req = new RestRequest(resource, httpMethod);
    // 将所有参数(如果适用,包括主体)添加到请求中
    req.AddParameter("api_key", this.APIKey);
    if (parameters != null)
    {
        foreach (Parameter p in parameters) req.AddParameter(p);
    }
    if (!string.IsNullOrEmpty(body)) req.AddBody(body); // <-- 问题在这里
    RestResponse resp = client.Execute(req);
    return resp.Data;
}

0
0 Comments

问题的出现原因是在当前版本的RestSharp中,使用request.Parameters.Add方法添加请求体时,设置Name参数的值实际上会被设置为Content-Type。因此,即使设置了不同的Name值,实际上都会被设置为"application/json"。

解决方法是根据Stack Overflow上的解答,在添加请求体时使用不同的Parameter对象来设置不同的ContentType和请求体内容。具体的解决方法如下:

request.Parameters.Add(new Parameter() { 
    ContentType = "application/json", 
    Name = "JSONPAYLOAD", // not required 
    Type = ParameterType.RequestBody, 
    Value = jsonBody
});
request.Parameters.Add(new Parameter() { 
    ContentType = "text/xml", 
    Name = "XMLPAYLOAD", // not required 
    Type = ParameterType.RequestBody, 
    Value = xmlBody
});

作者在尝试过程中使用了这个解决方法,并且在RestSharp 106.6.9版本中得到了正常的结果。然而,他提到在后续版本中也许不能得到相同的结果,因此建议根据实际情况选择合适的RestSharp版本来解决问题。

参考链接:[stackoverflow.com/a/44281853/109736](https://stackoverflow.com/a/44281853/109736)

0
0 Comments

问题原因:用户使用最新版本的RestSharp,但无法找到所需的方法签名。

解决方法:根据用户的需求,实现将文本添加到请求体的方法。

文章内容如下:

如何在RestSharp中向请求体中添加文本?

有时候我们需要将文本添加到RestSharp请求的请求体中。下面是如何添加纯文本XML字符串的方法:

req.AddParameter("text/xml", body, ParameterType.RequestBody);

同样,如果要添加纯文本JSON,可以使用以下方法:

req.AddParameter("text/json", body, ParameterType.RequestBody);

事实上,对于JSON(至少对于Rails),应该使用以下方法:

req.AddParameter("application/json", body, ParameterType.RequestBody);(感谢Jean Hominal在这里给出的提示)

如果要将HTML编码的字符串添加到请求体中,可以使用以下方法:

req.AddParameter("application/x-www-form-urlencoded", body, ParameterType.RequestBody);

有没有可能将流(pipe stream)传输到请求体的流(body stream)中?

根据文档,这种方法有一个大小限制:64 KB。如果请求体的大小超过64 KB,将返回状态码0。

如果您使用的是最新版本的RestSharp,可能无法找到这个方法的签名。

0