Я совершенно новичок в стеке ASP.NET MVC, и мне было интересно, что случилось с простым объектом Page и объектом Request ServerVariables?
По сути, я хочу вытащить IP-адрес клиентского ПК, но я не понимаю, как текущая структура MVC изменила все это.
Насколько я понимаю, большинство переменных объектов были заменены вариантами HttpRequest .
Кто-нибудь хочет поделиться некоторыми ресурсами? В мире ASP.NET MVC действительно есть что изучить. :)
Например, у меня есть статический класс с этой текущей функцией. Как получить тот же результат, используя ASP.NET MVC?
public static int getCountry(Page page)
{
return getCountryFromIP(getIPAddress(page));
}
public static string getIPAddress(Page page)
{
string szRemoteAddr = page.Request.ServerVariables["REMOTE_ADDR"];
string szXForwardedFor = page.Request.ServerVariables["X_FORWARDED_FOR"];
string szIP = "";
if (szXForwardedFor == null)
{
szIP = szRemoteAddr;
}
else
{
szIP = szXForwardedFor;
if (szIP.IndexOf(",") > 0)
{
string [] arIPs = szIP.Split(',');
foreach (string item in arIPs)
{
if (!isPrivateIP(item))
{
return item;
}
}
}
}
return szIP;
}
И как мне вызвать эту функцию со страницы контроллера?
c#
asp.net-mvc
melaos
источник
источник
Ответы:
Простой ответ - использовать свойство HttpRequest.UserHostAddress .
Пример: из контроллера:
Пример: из вспомогательного класса:
НО, если запрос был передан одним или несколькими прокси-серверами, тогда IP-адрес, возвращаемый свойством HttpRequest.UserHostAddress будет IP-адресом последнего прокси-сервера, который передал запрос.
Прокси-серверы МОГУТ использовать фактический стандарт размещения IP-адреса клиента в HTTP-заголовке X-Forwarded-For . Кроме того, нет никакой гарантии, что запрос имеет заголовок X-Forwarded-For, также нет гарантии, что X-Forwarded-For не был SPOOFED .
Оригинальный ответ
Приведенный выше код предоставляет IP-адрес Клиента, не прибегая к поиску коллекции. Свойство Request доступно в контроллерах (или представлениях). Поэтому вместо передачи класса Page вашей функции вы можете передать объект Request, чтобы получить тот же результат:
источник
Request.ServerVariables["REMOTE_ADDR"]
должно работать - либо непосредственно в представлении, либо в теле метода действия контроллера (Запрос - это свойство класса Controller в MVC, а не Page).Это работает ... но вы должны публиковать на реальных IIS, а не виртуальных.
источник
Большая часть кода здесь была очень полезной, но я очистил ее для своих целей и добавил несколько тестов. Вот чем я закончил:
И вот несколько тестов NUnit для этого кода (я использую Rhino Mocks для насмешки над HttpRequestBase, который является вызовом M <HttpRequestBase> ниже):
источник
publicForwardingIps.First()
?У меня были проблемы с использованием вышеуказанного, и мне нужен IP-адрес от контроллера. Я использовал следующее в конце:
источник
HttpContext.Request.UserHostAddress
В классе вы можете назвать это так:
Я использовал это в приложении бритвы с отличными результатами.
источник
Как я могу объяснить, что мой сайт находится за балансировкой эластичности нагрузки Amazon AWS (ELB):
источник