【问题标题】:How do I get the IP address of the current website in global.asax?如何在 global.asax 中获取当前网站的 IP 地址?
【发布时间】:2011-05-10 17:10:53
【问题描述】:

我想在 Application_Start 方法中执行此操作,因此如果站点在测试服务器上运行,我可以编写一个“robots.txt”文件。

谢谢

【问题讨论】:

  • webserver的ip地址不在请求对象中,也不在名为UserHostAddress的变量中。是什么让你这么想?
  • IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName()); csharp-examples.net/local-ip
  • @Kell 这可能行不通。一个 Web 服务器可能有许多 IP 地址,您需要找出该网站绑定到哪个 IP 地址。所以你必须使用主机头。
  • @Klaus - 你是对的,我对那个没有任何意义..

标签: asp.net


【解决方案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 express,所以如果您知道您的测试或实时服务器的名称,您可以对照它进行检查?

【讨论】:

  • 问题询问 global.asax Application_Start 方法。我想你会发现没有“请求进入的服务器地址”,因为没有特定的请求。所以这会悄悄地在你身上崩溃。下面的答案也有同样的问题。
【解决方案2】:

试试这个。

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

由于本地或远程服务器,Dns.GetHostAddresses 将返回不同的长度,

这就是为什么我使用 ips.Count()-1 来获得最少的一个。

【讨论】:

  • 如果你打算使用 LINQ,为什么不直接使用var serverIp = ips.Last();
【解决方案3】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2016-12-04
    • 2018-10-22
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多