如何检查本地主机

本文关键字:主机 检查 何检查 | 更新日期: 2024-11-06 15:18:29

c

# 中有没有办法检查应用程序是否在本地主机上运行(而不是生产服务器)?

我正在编写一个需要使用某个邮件队列的群发邮件程序,它在本地主机上运行。

if (Localhost)
{
Queue = QueueLocal;
}
else
{
Queue = QueueProduction;
}

如何检查本地主机

由于评论有正确的解决方案,我将发布它作为答案:

HttpContext.Current.Request.IsLocal 

像这样的事情呢:

public static bool OnTestingServer()
    {
        string host = HttpContext.Current.Request.Url.Host.ToLower();
        return (host == "localhost");
    }

在应用程序配置文件中使用一个值,该值将告诉您所处的环境。

由于您使用的是 asp.net,因此您可以利用配置文件转换来确保每个环境的设置正确。

看看这是否有效:

public static bool IsLocalIpAddress(string host)
{
  try
  { // get host IP addresses
    IPAddress[] hostIPs = Dns.GetHostAddresses(host);
    // get local IP addresses
    IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
    // test if any host IP equals to any local IP or to localhost
    foreach (IPAddress hostIP in hostIPs)
    {
      // is localhost
      if (IPAddress.IsLoopback(hostIP)) return true;
      // is local address
      foreach (IPAddress localIP in localIPs)
      {
        if (hostIP.Equals(localIP)) return true;
      }
    }
  }
  catch { }
  return false;
}

参考: http://www.csharp-examples.net/local-ip/

本地主机 IP 地址是常量,您可以使用它来确定它是本地主机还是远程用户。

但请注意,如果您登录到生产服务器,它也将被视为本地主机。

这包括 IP v.4 和 v.6:

public static bool isLocalhost( )
{
    string ip = System.Web.HttpContext.Current.Request.UserHostAddress;
    return (ip == "127.0.0.1" || ip == "::1");
}

要完全确定代码在哪个服务器上运行,您可以使用 MAC 地址:

public string GetMACAddress()
{
    NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
    String sMacAddress = string.Empty;
    foreach (NetworkInterface adapter in nics)
    {
        if (sMacAddress == String.Empty)// only return MAC Address from first card  
        {
            IPInterfaceProperties properties = adapter.GetIPProperties();
            sMacAddress = adapter.GetPhysicalAddress().ToString();
        }
    } return sMacAddress;
}

来自: http://www.c-sharpcorner.com/uploadfile/ahsanm.m/how-to-get-the-mac-address-of-system-using-Asp-NetC-Sharp/

例如,与web.config中的MAC地址进行比较。

public static bool isLocalhost( )
{
    return GetMACAddress() == System.Configuration.ConfigurationManager.AppSettings["LocalhostMAC"].ToString();
}
不幸的是,

核心中不再有HttpContext.HttpRequest.IsLocal()

但是在检查 .Net 中的原始实现后,通过检查HttpContext.Connection很容易重新实现相同的行为:

private bool IsLocal(ConnectionInfo connection)
{
    var remoteAddress = connection.RemoteIpAddress.ToString();
    // if unknown, assume not local
    if (String.IsNullOrEmpty(remoteAddress))
        return false;
    // check if localhost
    if (remoteAddress == "127.0.0.1" || remoteAddress == "::1")
        return true;
    // compare with local address
    if (remoteAddress == connection.LocalIpAddress.ToString())
        return true;
    return false;
}

或者,如果您只是面向开发环境,则可以使用 C# 预处理器指令(这是假设您的应用未在生产环境中的调试中运行!

#if debug
Queue = QueueLocal;
#else
Queue = QueueProduction;

就像这样:

HttpContext.Current.Request.IsLocal

我知道

这是非常古老的线程,但仍然有人在寻找一个直接的解决方案,那么你可以使用这个:

if (HttpContext.Current.Request.Url.Host == "localhost")
{
  //your action when app is running on localhost
}

字符串 hostName = Request.Url.Host.ToString();

这是一个替代的、更透明的选项:

public static bool IsLocal
{
    // MVC < 6
    get 
    {
        var authority = HttpContext.Request.Url.Authority.ToLower();
        return authority == "localhost" ||
               authority.StartsWith("localhost:");
    }
    // MVC 6+
    get 
    { 
        return String.Compare(HttpContext.Request.Url.Host, "localhost", 
                              StringComparison.OrdinalIgnoreCase);
    }
}

如果您没有Controller中执行此操作,请在HttpContext后添加Current,如HttpContext.Current.Request...

此外,在MVC 6,在View中,HttpContext只是Context