バイナリファイルはバイトとして HTTP クライアントに届くべきです。テキストリーダーで読み、得られた文字列を ASCII として再エンコードすると、プロキシが何かを受け取る前に値が置き換わる可能性があります。小さなテキストサンプルで動いたからといって、その経路が画像、アーカイブ、文書に対して安全になるわけではありません。

既存の .NET アップロード経路では、その変換をバイナリのボディソースに置き換えます:

using var file = File.OpenRead(path);
using var content = new StreamContent(file);

コンテンツをアプリケーションで設定済みの HTTP アップロードに通します。この断片はボディソースを確立し、既存のクライアントは引き続きメソッド、送信先、プロキシ、ライフタイムの処理を担います。

古い文字列の文字数から計算された Content-Length は削除します。このフィールドはオクテットを測ります。文字数と、異なるエンコーディングのバッファを組み合わせるのではなく、HTTP ライブラリにボディ表現からフレーミングを構築させるようにします。

意図的なテキストアップロードでは、エンコーディングを明示的に選び、必要な長さは送信するバイトから導きます。このテキスト形式の判断を任意のファイルに適用すべきではありません。

転送された成果物を信頼できる期待値と比較します。HTTP の成功は、その層でアップロード操作が完了したことを確認するだけであり、以前のテキスト変換が元のバイトを保持したことは示せません。

関連記事