visual-studio - 网络客户端问题 : Expectation failed?

标签 visual-studio httphandler webclient system.net.webexception

我有一个自定义的 Http Handler 来操作 HTTP POST 和 GET。我让项目在单独的隔离服务器上工作,现在需要将其投入生产......

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:

我只有 read以下:

由于存在较旧的实现,该协议(protocol)允许
客户可能会发送“期望: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 语句之前。我不认为这条线实际上有效。

最佳答案

我最终通过放置 ServicePointManager.Expect100Continue = false; 解决了这个问题。在调用 WebClient 类的构造函数中。

然后我用了Fiddler检查 POST 请求以确保 Expect: 100-continue不再在请求中。

关于visual-studio - 网络客户端问题 : Expectation failed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2970641/

相关文章:

spring-boot - 用于添加身份验证 header 的 WebClient 过滤器

c# - 加载 Microsoft.AspNet.WebApi.Client System.Net.Http.Formatting.dll 时尝试为 T4 文件查找 "missing dependency"

visual-studio - Visual Studio 2010 QuickWatch 窗口不可见

c - VS2019编译器支持哪个版本的C?

c# - 是否可以在不中断调试的情况下在 Visual Studio 中查看执行函数列表?

asp.net - 用户控件事件不会在 Httphandler 中触发

c# - httpModules 不适用于 iis7

visual-studio - Microsoft是否有计划支持MSTest以外的测试框架?

c# - HTTP 处理程序问题

c# - 如何在 asp.net mvc 中使用 DownloadProgressChangedEventHandler?