有沒有辦法讓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