0

この APIを使用しようとしています。これは、異なる形式間でファイルを変換します。要求の一部として、バイナリ形式のファイルが必要です。C#に関しては、それが何を意味するのかを正確に理解しようとしています。私が読んだものはすべて、バイト配列の使用を指していますが、これまでのところ機能していません。

基本的に、ドキュメントをバイナリに変換し、その生データを使用して、実際の POST 要求の送信を担当するシステムの別の部分にプラグインする必要があります。

API をよりよく理解するために、エンドポイントをテストし、リクエスト ペイロードを確認しました。Chrome は、File フィールドの一部として送信された生データを表示しません。

リクエスト ペイロードのスクリーンショット

Fiddler はそうしますが、意味不明です (おそらくバイトを ASCII として解釈しようとするため):

ここに画像の説明を入力

だから私は少し混乱しています。リクエスト ペイロードのフォーム データ オブジェクトのために、C# にあるファイルに対して何をする必要がありますか? 私はこれを試しました(そのシステムのAPIを使用して別のシステムからファイルにアクセスしています):

DocumentInfo di = this.BoundEntryInfo as DocumentInfo;
string contentType = "application/msword";
string binaryValue;

using (DocstarReadStream filestream = di.ReadDoc(out contentType)) //open a stream to the word document in the other system
{
    using (MemoryStream mstream = new MemoryStream())
    {
         filestream.CopyTo(mstream);
         binaryValue = string.Join("", mstream.ToArray());
    }
}

結果のbinaryValue文字列は次のような値になります。

...

ただし、これを POST 要求ペイロードの File フィールドの値として使用すると、Bad Request エラーが発生します (「変換エラー」と表示されるため、データの形式が何らかの形で間違っていると想定しています)。

4

1 に答える 1

1

バイト配列を文字列に変換して本文として送信する代わりに、選択した HttpClient を介して送信されるリクエスト ストリームにバイトを書き込む必要があります。content-type エンコーディングは、生のバイナリ データをペイロードとして送信することを期待しており、文字列の解釈をどうするかわかりません。

これが、フィドラーのデータが意味不明に見える理由です。ご想像のとおり、これはバイナリ データのテキスト表現です。

于 2016-09-10T01:31:53.753 に答える