Как получить имя хоста, Ip-адрес компьютера, на котором размещено asp.net приложение

#c# #asp.net #email #smtp #localhost

#c# #asp.net #Адрес электронной почты #smtp #localhost

Вопрос:

Как я могу получить LocalHostName, Ip-адрес компьютера, на котором размещено приложение. Для разработки это было бы localhost для развертывания чем-то другим. Это мне нужно для инициализации SmtpClient для отправки электронных писем через приложение

 SmtpClient emailClient = new SmtpClient("host","port");//port is optional
  

я ищу постоянное решение, без обходных путей и без перехвата ответа, запроса, и это может быть подделано [надеюсь, я не сумасшедший, потому что никто не может подделать данные серверов в заголовках, не так ли?]

Ответ №1:

Если вы хотите настроить класс SmtpClient, вам следует взглянуть на system.net > запись mailsettings в web.config :http://msdn.microsoft.com/en-us/library/w355a94k.aspx

 <configuration>
    <system.net>
        <mailSettings>
            <smtp deliveryMethod="network">
                <network
                    host="localhost"
                    port="25"
                    defaultCredentials="true"
                />
            </smtp>
        </mailSettings>
    </system.net>
</configuration>
  

И создать экземпляр StmpClient с помощью конструктора без параметров

 var client = new SmtpClient();
  

Комментарии:

1. @mathieu работает ли это как в системах разработки, так и в системах развертывания? также как мне теперь инициализировать класс SmtpClient.

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

3. @mathieu я не смог до тебя дозвониться. Вышеуказанные настройки работают только для localhost, это то, что вы имеете в виду?

4. Приведенные выше настройки означают, что smtp-сервер расположен на хосте «localhost». Если сервер включен «stmp.mycompany.com «вы должны соответствующим образом отредактировать конфигурацию.

5. Если stmp-сервер находится на том же сервере, что и ваше приложение, настройки должны работать, поскольку «localhost» представляет локальную машину…

Ответ №2:

если вы используете

     IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
  

и

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

он должен возвращать что-то вроде

 IsLocalIpAddress("localhost");        // true (loopback name)
IsLocalIpAddress("127.0.0.1");        // true (loopback IP)
IsLocalIpAddress("MyNotebook");       // true (my computer name)
IsLocalIpAddress("192.168.0.1");      // true (my IP)
IsLocalIpAddress("NonExistingName");  // false (non existing computer name)
IsLocalIpAddress("99.0.0.1");         // false (non existing IP in my net)
  

это можно просто изменить, чтобы вернуть нужный вам адрес

Комментарии:

1. Все, что я хотел знать, это был ли какой-либо способ получить IP, имя хоста компьютера, на котором размещено asp.net приложение. И я получаю метод, в котором мне нужно ввести каждый хост и проверить наличие действительного хоста??

2. @Deeptechons первая часть вернет IP-адреса всех компьютеров, вам просто нужно выяснить, какой из ip-адресов использовать, поскольку некоторые из них будут локальными адресами, а другие — нет