Подтвердить что ты не робот

Как проверить, если localhost

Есть ли способ в С#, чтобы проверить, работает ли приложение на локальном хосте (в отличие от производственного сервера)?

Я пишу программу массовой рассылки, которая должна использовать определенную почтовую очередь, она работает на localhost.

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

Ответ 1

Используйте значение в файле конфигурации приложения, в котором будет указано, в какой среде вы находитесь.

Поскольку вы используете asp.net, вы можете использовать конфигурационные преобразования файлов, чтобы убедиться, что настройки верны для каждой из ваших сред.

Ответ 2

Как комментарий имеет правильное решение, я собираюсь опубликовать его в качестве ответа:

HttpContext.Current.Request.IsLocal 

Ответ 3

Что-то вроде:

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

Ответ 4

Посмотрите, работает ли это:

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/

Ответ 5

Локальный 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;
}

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

И сравните с MAC-адресом в web.config, например.

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

Ответ 6

просто так:

HttpContext.Current.Request.IsLocal

Ответ 7

Это работает для меня:

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

Если вы не выполняете это в Controller, затем добавьте Current после HttpContext, как в HttpContext.Current.Request...

Кроме того, в MVC 6, в View, HttpContext является просто Context

Ответ 8

Или вы можете использовать С# Preprocessor Directive, если вы просто нацеливаете среду разработки (это предполагает, что ваше приложение не запускается в отладке в производстве!):

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

Ответ 9

К сожалению, в ядре больше нет 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;
}