40

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

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

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

11 回答 11

78

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

HttpContext.Current.Request.IsLocal 
于 2015-05-28T17:10:40.093 回答
34

怎么样的东西:

public static bool OnTestingServer()
    {
        string host = HttpContext.Current.Request.Url.Host.ToLower();
        return (host == "localhost");
    }
于 2012-08-06T18:53:21.217 回答
22

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

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

于 2012-08-06T18:53:56.527 回答
20

看看这是否有效:

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/

于 2012-08-06T18:54:06.163 回答
7

本地主机 ip 地址是恒定的,您可以使用它来确定它是本地主机还是远程用户。

但请注意,如果您登录生产服务器,它也将被视为 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();
}
于 2012-08-06T19:59:37.213 回答
6

不幸的是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;
}
于 2017-12-13T08:42:27.690 回答
2

或者,如果您只是针对开发环境,您可以使用C# 预处理器指令(这是假设您的应用程序没有在生产中调试运行!):

#if debug
Queue = QueueLocal;
#else
Queue = QueueProduction;
于 2013-09-05T20:14:21.447 回答
2

像这样:

HttpContext.Current.Request.IsLocal

于 2016-03-23T18:27:20.360 回答
1

字符串主机名 = Request.Url.Host.ToString();

于 2019-11-29T03:54:55.063 回答
1

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

if (HttpContext.Current.Request.Url.Host == "localhost")
{
  //your action when app is running on localhost
}
于 2021-05-08T05:35:53.887 回答
0

这是另一种更透明的选择:

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);
    }
}

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

此外,在MVC 6,在ViewHttpContext只是Context

于 2022-02-22T04:57:34.173 回答