質問

HTTPの投稿を操作して取得するカスタムHTTPハンドラーがあります。私はプロジェクトを別々の孤立したサーバーで動作させました。

using (var client = new WebClient())
                {
                    client.Credentials = CredentialCache.DefaultCredentials;
                    client.UploadFile("serverlocation:port", fileToUpload);
                }

何らかの理由で使用するとき client.UploadFile("", file); つまり、HTTP投稿を強制します

System.Net.WebException: The remote server returned an error: (417) Expectation failed.

   at System.Net.WebClient.UploadFile(Uri address, String method, String fileName)

これは何でしょうか?私はコードが機能することを知っているので、他に何がありますか?たぶん、サーバーはHTTPの投稿要求をブロックしますか?

追加してみました:

ServicePointManager.Expect100Continue = false;

しかし、私はこのコードが以前にどこにあるべきか100%確信していませんが、成功していません。


編集0:

私はただ持っています 読んだ 以下:

古い実装が存在するため、プロトコルは、クライアントが417(期待が失敗した)ステータスまたは100(継続)ステータスのいずれかを受け取らずに「予想:100-続行」を送信できる曖昧な状況を可能にします。したがって、クライアントがこのヘッダーフィールドをOriginサーバーに送信する場合(おそらくプロキシを介して)、100(継続)ステータスを見たことがない場合、クライアントはリクエストボディを送信する前に無期限に待つべきではありません。

このリクエストはプロキシを通過していると思います。これは問題と関係があるかもしれません。

編集1:

Fiddlerを使用して私のアプリケーションが送信しているものを正確に確認するため、この問題は100継続しなければならないと信じています 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; 使用ステートメントの前。このラインは実際には機能しないと思います。

役に立ちましたか?

解決

私はこれを置くことでこれを解決することになりました ServicePointManager.Expect100Continue = false; Calling WebClientクラスのコンストラクター。

それから私は使用しました フィドラー POSTリクエストを確認するために Expect: 100-continue もうリクエストされていませんでした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top