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不在请求中。