如何检查localhost

时间:2012-08-06 18:50:52

标签: c# asp.net .net

c#中是否有办法检查应用程序是否在localhost上运行(而不是生产服务器)?

我正在编写一个群发邮件程序,需要使用某个邮件队列才能在localhost上运行。

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

11 个答案:

答案 0 :(得分:51)

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

HttpContext.Current.Request.IsLocal 

答案 1 :(得分:32)

如下:

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

答案 2 :(得分:18)

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

由于您使用的是asp.net,因此可以使用config file transforms来确保每个环境的设置都正确。

答案 3 :(得分:17)

看看是否有效:

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/

答案 4 :(得分:6)

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

但要注意,如果您已登录到生产服务器,它也将被视为localhost。

这包括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();
}

答案 5 :(得分:2)

不幸的是,核心内部不再有HttpContext.HttpRequest.IsLocal()

但是在检查.Net中的original implementation之后,通过选中HttpContext.Connection来重新实现相同的行为非常容易:

mergeWith

答案 6 :(得分:1)

就像这样:

HttpContext.Current.Request.IsLocal

答案 7 :(得分:0)

这对我有用:

public static bool IsLocal
{
    // MVC < 6
    get { return HttpContext.Request.Url.Authority.Contains("localhost"); }
    // MVC 6
    get { return HttpContext.Request.Host.Contains("localhost"); }
}

如果你<{1}} },那么在Controller之后添加Current,就像HttpContext

一样

此外,在HttpContext.Current.Request...中,在MVC 6中,View只是HttpContext

答案 8 :(得分:0)

或者,如果您只是针对开发环境(假设您的应用不在生产中的调试中运行,则可以使用C# Preprocessor Directive):

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

答案 9 :(得分:0)

string hostName = Request.Url.Host.ToString();

答案 10 :(得分:0)

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

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