有没有办法获得System.Net.WebRequest
或System.Net.WebClient
尊重hosts
或lmhosts
文件?
例如:在我的主机文件中,我有:
10.0.0.1 www.bing.com
当我尝试在浏览器(IE 和 FF)中加载 Bing 时,它无法按预期加载。
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
尊重主机文件但System.Net.WebRequest
忽略它?我需要更改什么才能使 WebRequest 尊重主机文件?
附加信息:
- 如果我禁用 IPv6 并将我的 IPv4 DNS 服务器设置为 127.0.0.1,上述代码将按预期工作(失败)。但是,如果我将我的正常 DNS 服务器作为备用服务器添加回来,意外的行为就会恢复。
- 我已经在 3 个 Win7 和 2 个 Vista 盒子上复制了这个。唯一不变的是我公司的网络。
- 我正在使用 .NET 3.5 SP1 和 VS2008
编辑
根据@Richard Beier 的建议,我尝试了System.Net
追踪。随着跟踪失败WebRequest
,它应该。但是,一旦我关闭跟踪,行为就会恢复到意外的成功。我已经在调试和发布模式下在与以前相同的机器上复制了它。
编辑 2
这原来是公司代理给我们带来的问题。我们的解决方案是我们的测试机器的自定义代理配置脚本,其中“bing.com”指向 DIRECT 而不是默认代理。