2010-11-16 126 views
1

我想在Application_Start方法中這樣做,所以如果站點在測試服務器上運行,我可以編寫一個'robots.txt'文件。如何在global.asax中獲取當前網站的IP地址?

感謝

+0

Web服務器的IP地址不在請求對象中,也不在名爲UserHostAddress的變量中。是什麼讓你覺得呢? – 2010-11-16 09:48:45

+0

IPAddress [] localIPs = Dns.GetHostAddresses(Dns.GetHostName()); http://www.csharp-examples.net/local-ip/ – Kell 2010-11-16 09:50:34

+0

@Kell這可能無法正常工作。 Web服務器可能有許多IP地址,您需要找出該網站綁定的是哪一個。所以你必須使用主機頭。 – Aliostad 2010-11-16 09:57:24

回答

0

試試這個:

 HttpRequest httpRequest = HttpContext.Current.Request; 
     string host = httpRequest.Headers["host"]; 
     IPAddress hostAddresse = Dns.GetHostAddresses("host").Where(a=>a.AddressFamily ==AddressFamily.InterNetwork).FirstOrDefault(); 
1

我本來以爲老同學,用ServerVariables collection,如下面的在我的測試應用程序很好地工作,但在內置的VS web服務器運行:

void Application_Start(object sender, EventArgs e) { 
    // Code that runs on application startup 
    string localAddress = Context.Request.ServerVariables["LOCAL_ADDR"]; 
    // Returns "::1" when running under the VS server, however it throws an 
    // exception under IIS Express, so I assume it also does so under IIS. 
} 

我能想出下一個最好的辦法是這樣的:

void Application_Start(object sender, EventArgs e) { 
    // Code that runs on application startup 
    string serverName = Server.MachineName; 
} 

它可以在VS和IIS上運行,所以如果你知道測試服務器或活動服務器的名稱,你可以檢查它嗎?

+0

問題詢問global.asax Application_Start方法。我想你會發現沒有「請求進來的服務器地址」,因爲沒有具體的請求。所以這會悄然崩潰在你身上。下面的答案也是同樣的問題。 – philw 2012-07-04 17:11:15

1

試試這個。

var ips = Dns.GetHostAddresses(Dns.GetHostName()); 
if (ips.Any()) 
{ 
    var serverIp = ips[ips.Count()-1]; 
} 

Dns.GetHostAddresses將不同長度返回由於本地或遠程服務器,

,這就是爲什麼我使用ips.Count() - 1,以獲得至少一個。

+1

如果你打算使用LINQ,爲什麼不使用'var serverIp = ips.Last();'? – Toothbrush 2015-03-03 13:52:34