Здравствуйте, мне нужно получить IP-адрес клиента, который запрашивает какой-либо метод в веб-api, я пытался использовать этот код здесь, но он всегда возвращает локальный IP-адрес сервера, как правильно?
HttpContext.Current.Request.UserHostAddress;
из других вопросов:
public static class HttpRequestMessageExtensions
{
private const string HttpContext = "MS_HttpContext";
private const string RemoteEndpointMessage = "System.ServiceModel.Channels.RemoteEndpointMessageProperty";
public static string GetClientIpAddress(this HttpRequestMessage request)
{
if (request.Properties.ContainsKey(HttpContext))
{
dynamic ctx = request.Properties[HttpContext];
if (ctx != null)
{
return ctx.Request.UserHostAddress;
}
}
if (request.Properties.ContainsKey(RemoteEndpointMessage))
{
dynamic remoteEndpoint = request.Properties[RemoteEndpointMessage];
if (remoteEndpoint != null)
{
return remoteEndpoint.Address;
}
}
return null;
}
}
c#
asp.net
asp.net-web-api
Arbejdsglæde
источник
источник
Ответы:
Следующая ссылка может вам помочь. Вот код из следующей ссылки.
ссылка: получение-клиента-ip-через-asp-net-web-api
Другой способ сделать это - ниже.
ссылка: как-получить-доступ-клиент-s-ip-адрес
Для веб-версии
Для самостоятельного размещения
источник
С веб-API 2.2:
Request.GetOwinContext().Request.RemoteIpAddress
источник
Попробуйте получить IP, используя
источник
Если вы самостоятельно размещаете Asp.Net 2.1 с помощью пакета NuGet для самостоятельного размещения OWIN, вы можете использовать следующий код:
источник
Отвечаю на этот пост 4-летней давности, потому что мне это кажется слишком сложным, по крайней мере, если вы размещаете на IIS, и этот пост очень высок на DuckDuckGo (и, вероятно, NSAoogle) для «веб-контроллера api получить IP-адрес».
Вот как я это решил:
В отличие от OP, это дает мне IP-адрес клиента и имя хоста клиента, а не сервер. Возможно, с тех пор они исправили ошибку?
источник
Лучше закинуть
HttpContextBase
, так вам будет проще смоделировать и протестироватьисточник
Я думаю, что это наиболее понятное решение, использующее метод расширения:
Так что просто используйте это как:
Мы используем это в наших проектах.
Источник / ссылка: получение IP-адреса клиента в веб-API ASP.NET
источник
Мое решение похоже на ответ user1587439, но работает непосредственно с экземпляром контроллера (вместо доступа к HttpContext.Current).
В окне 'Watch' я увидел, что this.RequestContext.WebRequest содержит свойство 'UserHostAddress', но поскольку он полагается на тип WebHostHttpRequestContext (который является внутренним для сборки 'System.Web.Http') - я не иметь к нему доступ напрямую, поэтому я использовал отражение, чтобы получить к нему прямой доступ:
string hostAddress = ((System.Web.HttpRequestWrapper)this.RequestContext.GetType().Assembly.GetType("System.Web.Http.WebHost.WebHostHttpRequestContext").GetProperty("WebRequest").GetMethod.Invoke(this.RequestContext, null)).UserHostAddress;
Я не говорю, что это лучшее решение. использование отражения может вызвать проблемы в будущем в случае обновления фреймворка (из-за изменения имени), но для моих нужд это идеально
источник
Это работает на меня.
System.Web.HttpContext.Current.Request.UserHostName;
этот вернет мне тот же доход, что и яUserHostAddress
.источник