我正在使用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"?
从这里的文档
请求主体
如果设置了此参数,则其值将作为要求只接受一个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-Type
从text/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标头。"