在一次模拟HTPP请求时,本人在项目中的一般处理程序中调用客户接口返回非成功的结果。为了方便调试,所以将核心代码拷贝至控制台中进逐个调试。
在控制台中,启动调试时提示:
未经处理的异常: System.Net.WebException: 远程服务器返回错误: (417)
Expectation
failed。
由于代码与在一般处理程序中的一致,并无区别。后来由于之前在一次处理中文乱码的经验中,在其他环境下面调试发现并无乱码,经人提醒将Web.config拷贝至新的测试环境下则发现了乱码并进行调试解决。有了该经历,我在怀疑是否因为配置文件的原因导致的。并将Web.config中的所有配置拷贝至app.config中。启动后毅然发现错误消除了,后经逐步删除各个节点启动发现在<system.net>节点中某个节点配置导致。
配置节点如下:
1 <system.net> 2 <settings> 3 <servicePointManager expect100Continue="false"/> 4 </settings> 5 </system.net>
后经继续搜索找到在发起HTTP请求时在代码前设置如下也可解决HTTP 417
// 摘要: //获取或设置一个 System.Boolean 值,该值确定是否使用 100-Continue 行为。 // // 返回结果: //若要启用 100-Continue 行为,则为 true。默认值为 true。 System.Net.ServicePointManager.Expect100Continue = false;
解决原理应该是设置100-Continue 行为 false,一个是通过配置文件设置,一个是通过代码实时设置,异曲同工。