有没有办法让System.Net.WebRequest
或System.Net.WebClient
尊重hosts
或lmhosts
文件?System.Net.WebRequest不尊重主机文件
例如:在我的主机文件我有:
10.0.0.1 www.bing.com
当我尝试加载兵在浏览器(IE和FF)它不能进行正常加载。
Dns.GetHostAddresses("www.bing.com")[0]; // 10.0.0.1
WebRequest.Create("http://10.0.0.1").GetResponse(); // throws exception (expected)
WebRequest.Create("http://www.bing.com/").GetResponse(); // unexpectedly succeeds
同理:
WebClient wc = new WebClient();
wc.DownloadString("http://www.bing.com"); //succeeds
为什么会System.Net.Dns
尊重hosts文件,但System.Net.WebRequest
忽略它?为了使WebRequest尊重hosts文件,我需要做些什么?
附加信息:
- 如果我禁用IPv6,并设置我的IPv4的DNS服务器为127.0.0.1,在上面的代码工作(失败),符合市场预期。但是,如果我将正常的DNS服务器添加回来,则意外行为会恢复。
- 我已经在3个Win7和2个Vista盒子上重现了这一点。唯一不变的是我公司的网络。
- 我使用.NET 3.5 SP1和VS2008
编辑
每@Richard贝尔的建议下,我尝试了System.Net
跟踪。跟踪ONWebRequest
失败,因为它应该。然而,只要我将追踪关闭行为恢复到意想不到的成功。在调试和发布模式下,我已经像以前一样在相同的机器上重现了这一点。
编辑2
事实证明,这是该公司代理给我们的问题。我们的解决方案是我们的测试机器的自定义代理配置脚本,它具有“bing.com”指向DIRECT而不是默认代理。
我猜你是通过你的网络中的代理工作。你的浏览器做什么? – 2010-08-13 21:08:31
IE和FF都按预期运行(尝试从hosts文件中指示的服务器加载)。 – Nate 2010-08-13 21:30:51
你尝试过'ipconfig/flushdns'吗? – Aren 2010-08-13 23:51:03