3

我有一個處理HTTP POST和GET的自定義Http處理程序。我用client.UploadFile("", file);即迫使HTTP POSTwebclient問題:期望失敗?

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

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

當拿到項目一個單獨的獨立的服務器上的工作現在需要把它在生產...

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

出於某種原因,現在怎麼辦這可以嗎?我知道代碼有效,那還有什麼?也許服務器阻止HTTP POST請求?

我曾嘗試加入:

ServicePointManager.Expect100Continue = false;

但沒有成功,雖然我不是100%肯定這個地方應該代碼之前,我想我使用WebClient的


編輯0:

我剛纔read如下:

由於舊的實現的存在,該協議允許 模糊的情況,其中一個客戶端可以發送「期望值:100- 繼續」而不接收任何一個417(預期失敗)狀態 或100(繼續)狀態。因此,當客戶端將這個 標題字段發送到源服務器(可能通過代理服務器)時,它從未見過100(繼續)狀態,客戶端在發送請求主體之前不應該等待 無限期。

我相信這個請求是通過代理,這可能與問題有關。

編輯1:

相信這個問題必須是具有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;之前的使用說明。我不認爲這條線實際上起作用。

回答

3

我最終解決了這個問題,將ServicePointManager.Expect100Continue = false;放在調用WebClient類的構造函數中。

然後我用Fiddler來檢查POST請求,以確保Expect: 100-continue不在請求中。