Я всегда использую третий вариант, чтобы получить IP-адрес клиента (или пользователя).
System.Web.HttpContext.Current.Request.UserHostAddress;
Первые два метода также делают то же самое.
Но последний метод делаетне вернет ip клиента, он вернет ip сервера, на котором расположен ваш сайт.И для вызова этого метода необходимо указать имя хоста или IP-адрес.Тем не менее, Environment.MachineName
возвращает имя сервера, и поэтому он будет возвращать IP-адрес сервера, а не IP-адрес пользователя.
Для получения дополнительной информации о ваших первых двух вариантах я нахожу разницу путем поиска в Google, здесь это