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 をいじってみると、「text/xml」ではなく「application/xml」が必要であることがわかりました。

RestSharp が代わりに「application/xml」を送信するサポートされている方法はありますか?

4

2 に答える 2

2

ここのドキュメントから

リクエスト本文

このパラメーターが設定されている場合、その値はリクエストの本文として送信されます。1 つの 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>"

ご覧のとおり、ContentTypenull は少し厄介なようです。しかし、@Paddy が示すように、RestSharp のドキュメントには、「パラメーターの名前は、要求の Content-Type ヘッダーとして使用される」と記載されています。

于 2015-11-12T13:49:18.313 に答える