HTTP POST と GET を操作するカスタム Http ハンドラーがあります。プロジェクトを別の隔離されたサーバーで動作させたので、それを本番環境に置く必要があります...
using (var client = new WebClient())
{
client.Credentials = CredentialCache.DefaultCredentials;
client.UploadFile("serverlocation:port", fileToUpload);
}
何らかの理由client.UploadFile("", file);
で、HTTP POST を強制的に使用する場合
System.Net.WebException: The remote server returned an error: (417) Expectation failed.
at System.Net.WebClient.UploadFile(Uri address, String method, String fileName)
これは何ですか?コードが機能することはわかっています。サーバーが HTTP POST 要求をブロックしている可能性がありますか?
私は追加しようとしました:
ServicePointManager.Expect100Continue = false;
しかし、私はこのコードが以前にどこにあるべきか100%確信が持てませんでしたが、成功していません.WebClientを使用する前だと思います
編集 0 :
私はちょうど次のことを読んだ:
古い実装が存在するため、プロトコルは、クライアントが 417 (Expectation Failed) ステータスまたは 100 (Continue) ステータスを受信せずに「Expect: 100- continue」を送信する可能性があるあいまいな状況を許可します。したがって、クライアントがこのヘッダー フィールドを、100 (Continue) ステータスを確認したことがないオリジン サーバーに (おそらくプロキシ経由で) 送信する場合、クライアントは、リクエスト ボディを送信する前に無期限に待機するべきではありません (SHOULD NOT)。
このリクエストはプロキシ経由で行われていると思いますが、これが問題に関係している可能性があります。
編集1:
この問題は 100-continue にあると信じてください。なぜなら、fiddler を使用してアプリケーションが何を送信しているかを正確に確認すると、次のようになるからですWebClient.UploadFile
。
POST http://XXX.XXX.XXX.XXX:8091/file.myhandledextension HTTP/1.1
Content-Type: multipart/form-data; boundary=---------------------8ccd1eb03f78bc2
Host: XXX.XXX.XXX.XXX:8091
Content-Length: 4492
Expect: 100-continue
その行を入れたにもかかわらず: ServicePointManager.Expect100Continue = false;
using ステートメントの前に。この行は実際には機能しないと思います。