将XML作为“;application/xml”;而不是“;text/xml”;通过RestSharp

本文关键字:xml text 通过 RestSharp application 作为 XML | 更新日期: 2023-09-27 18:20:56

我正在使用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"?

将XML作为“;application/xml”;而不是“;text/xml”;通过RestSharp

从这里的文档

请求主体

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

参数的名称将用作请求。

因此:

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

作为@Paddy提供的解决方案的替代方案,使用RestSharp版本105.2.3,我发现以下内容将请求的Content-Typetext/xml更改为application/xml:

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

以下是我在完成上述操作后在Visual Studio调试器中看到的request.Parameters[0]

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

正如你所看到的,ContentType为空,这对我来说似乎有点麻烦。但正如@Paddy所指出的,RestSharp文档中说,"参数的名称将用作请求的Content-Type标头。"