我有一个自定义的 Http Handler 来操作 HTTP POST 和 GET。我让项目在单独的隔离服务器上工作,现在需要将其投入生产......
using (var client = new WebClient())
{
client.Credentials = CredentialCache.DefaultCredentials;
client.UploadFile("serverlocation:port", fileToUpload);
}
由于某种原因,现在使用client.UploadFile("", file);
ie 强制 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:
我刚刚阅读了以下内容:
由于存在较旧的实现,该协议允许客户端可能发送“期望:100-继续”而没有收到 417(期望失败)状态或 100(继续)状态的模棱两可的情况。因此,当客户端将此标头字段发送到它从未见过 100(继续)状态的源服务器(可能通过代理)时,客户端不应该在发送请求正文之前等待无限期。
我相信这个请求是通过代理进行的,这可能与问题有关。
编辑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 语句之前。我不认为这条线实际上有效。