4

我正在使用RestSharp连接到Salesforce Bulk API

当我使用添加对象时AddBody

var request = new RestRequest( Method.POST);
request.RequestFormat = DataFormat.Xml;
request.AddHeader("X-SFDC-Session", loginresult.SessionID);
var ji = new jobInfo { operation = "insert", @object = "contact", contentType = "CSV" };
request.AddBody(ji, xmlns);

Salesforce 拒绝它并显示以下错误消息:

不支持的内容类型:text/xml

...大概是因为在幕后 RestSharp 被解释request.RequestFormat = DataFormat.Xml;为“text/xml”。

通过摆弄 Salesforce API,我发现它需要“application/xml”而不是“text/xml”。

是否有支持的方式让 RestSharp 发送“application/xml”?

4

2 回答 2

2

这里的文档

请求体

如果设置了此参数,则其值将作为请求正文发送。只接受一个 RequestBody 参数——第一个。

参数的名称将用作请求的 Content-Type 标头。

所以:

var ji = new jobInfo { operation = "insert", @object = "contact", contentType = "CSV" };

var jiSerialized = /* Serialize ji to XML format */

request.AddParameter(new Parameter
{
    Name = "application/xml",
    Type = ParameterType.RequestBody,
    Value = jiSerialized 
})
于 2015-02-23T13:11:37.873 回答
0

作为@Paddy 提供的解决方案的替代方案使用RestSharp 105.2.3 版,我发现以下内容会将Content-Type请求的从更改text/xmlapplication/xml

request.AddBody(ji, xmlns);
request.Parameters[0].Name = "application/xml"; // default is "text/xml"

这是我request.Parameters[0]在执行上述操作后在 Visual Studio 调试器中看到的内容:

ContentType    null
Name           "application/xml"
Type           RequestBody
Value          "<YourSerializedXmlDocHere>...</YourSerializedXmlDocHere>"

如您所见,ContentTypeis null 对我来说似乎有点麻烦。但正如@Paddy 所指出的,RestSharp 文档说“参数的名称将用作请求的 Content-Type 标头。”

于 2015-11-12T13:49:18.313 回答