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


103

我正在尝试使用RestSharp来使用Web服务。到目前为止,一切进展顺利(向John Sheehan和所有贡献者致敬!),但我遇到了麻烦。假设我想以已经序列化的形式(即,作为字符串)将XML插入RestRequest的主体中。是否有捷径可寻?似乎.AddBody()函数在后台进行序列化,因此我的字符串变成了<String />

任何帮助是极大的赞赏!

编辑:我的当前代码的示例被要求。见下文 -

private T ExecuteRequest<T>(string resource,
                            RestSharp.Method httpMethod,
                            IEnumerable<Parameter> parameters = null,
                            string body = null) where T : new()
{
    RestClient client = new RestClient(this.BaseURL);
    RestRequest req = new RestRequest(resource, httpMethod);

    // Add all parameters (and body, if applicable) to the request
    req.AddParameter("api_key", this.APIKey);
    if (parameters != null)
    {
        foreach (Parameter p in parameters) req.AddParameter(p);
    }

    if (!string.IsNullOrEmpty(body)) req.AddBody(body); // <-- ISSUE HERE

    RestResponse<T> resp = client.Execute<T>(req);
    return resp.Data;
}

您当前的代码是什么样的?哪里有问题?
Oded

2
抱歉,直到现在都没有看到。您可能需要使用AddParameter()。如果这不是您想要的,请向Google组发布带有示例的正文示例,其中包含您要实现的params + xml。groups.google.com/group/restsharp
John Sheehan

Answers:


215

以下是将纯XML字符串添加到请求正文的方法:

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


34
+1同样,要添加纯JSON,则为req.AddParameter(“ text / json”,body,ParameterType.RequestBody);
保罗·普雷威特

49
其实,对JSON应该是(至少为Rails):req.AddParameter("application/json", body, ParameterType.RequestBody);感谢Jean Hominal的小费这里
MrWater

1
我该如何将其设置为仅HTML编码的字符串?即,大的get VAL = 2&val2次= 3等等
詹姆斯

4
我认为req.AddParameter(“ application / x-www-form-urlencoded”,body,ParameterType.RequestBody);
Brian Rice

2
我正在使用最新版本的RestSharp,并且此方法签名不可用。
jrahhali '16

6

要添加到@dmitreyg的答案和@jrahhali对他的答案的评论,在当前版本中,自发布之v105.2.3日起,其语法如下:

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
});

1
我尝试了此操作,但是实际上我在Name参数中设置的内容都设置为content-Type。因此,对于ContentType和Name,我都使用了“ application / json”。
Thangadurai

我尝试了这一点,并在rest#中得到了空引用异常。在stackoverflow.com/a/44281853/109736上
JasonCoder

@JasonCoder感谢您的评论。v105.2.3是否也是同一版本?我要求与更高版本混合使用的结果是这样。现在是106,可能无法正常运行。
有趣的名字,这里

@GibralterTop我的成绩是106.6.9
JasonCoder
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.