2011-03-14 146 views
2

我有一個在Web主機上運行的ASP.NET應用程序。有一些邏輯正在調用HttpRequest.Host.Url解析爲與請求的域名不同的東西 - 可能的罪魁禍首?

(HttpRequest)Request.Host.Url 

動態構建一些URL以用於定位標記。在我的本地開發環境中,結果如預期的那樣,即Host.Url的「localhost」。

但是,在生產服務器上,它不是我所期望的。該網頁的網址我加載的樣子:

http://www.example.com/forms/someform.aspx 

使用HttpRequest.Url.Host正在建設的網頁一些鏈接,其結果實際上是邏輯:

http://www.example.com.z82.webhostname.com/forms/somfform.aspx 

有什麼事情導致這個?我的印象是HttpRequest.Url.Host基於http請求頭,在頁面加載的情況下是基本的www.example.com。

如果虛擬主機使用某種代理服務器來重新引導請求(而不是直接將DNS重新綁定到負責任的ASP.NET服務器),那會導致這個問題嗎?或者它可能是別的東西?

回答

0

我觀察到類似的行爲,但我不明白爲什麼.NET/IIS以這種奇怪的方式處理請求。另一個有趣的測試是使用Request.Url.ToString(),它將報告一個地址,然後使用string.Replace()(或另一個字符串方法),它將報告不同的地址。

它似乎與DNS記錄(一般環境設置)有關。

0

我相信Request.Url.Host描繪的是無論您的客戶端碰巧遇到的TCP堆棧的反向DNS。同樣的事情發生,如果我ping www.google.com;我得到Pinging www.l.google.com [74.125.227.51] with 32 bytes of data...。不一樣的主機。

如果你想這是輸入到瀏覽器的地址欄準確的主機名,使用HTTP主機頭:如果出現在地址欄Request.Headers["Host"]

注意Request.Headers["Host"]將包含端口號,所以如果你」只需預期主機名稱,請使用Request.Headers["Host"].Split(':')[0]

相關問題