Olá estou precisando pegar o IP do cliente que pede algum método na web api, já tentei usar esse código daqui mas ele sempre retorna o IP local do servidor, como conseguir de forma correta?
HttpContext.Current.Request.UserHostAddress;
de outras questões:
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
fonte
fonte
Respostas:
O link a seguir pode ajudá-lo. Aqui está o código do link a seguir.
referência: getting-the-client-ip-via-asp-net-web-api
Outra maneira de fazer isso está abaixo.
referência: how-to-access-the-client-s-ip-address
Para versão hospedada na web
Para auto-hospedado
fonte
Com Web API 2.2:
Request.GetOwinContext().Request.RemoteIpAddress
fonte
Tente obter o IP usando
fonte
Se você estiver se hospedando sozinho com Asp.Net 2.1 usando o pacote OWIN Self-host NuGet, poderá usar o seguinte código:
fonte
Respondendo a este post de 4 anos, porque isso me parece muito complicado, pelo menos se você estiver hospedando no IIS e este post for muito alto no DuckDuckGo (e provavelmente no NSAoogle) para "controlador de API da web obter endereço IP".
Veja como eu resolvi:
Ao contrário do OP, isso me dá o IP do cliente e o nome do host do cliente, não o servidor. Talvez eles tenham corrigido o bug desde então?
fonte
É melhor lançar para
HttpContextBase
, desta forma você pode simular e testar mais facilmentefonte
Acho que esta é a solução mais clara, usando um método de extensão:
Então, use-o como:
Usamos isso em nossos projetos.
Fonte / Referência: Recuperando o endereço IP do cliente na API Web ASP.NET
fonte
Minha solução é semelhante à resposta do user1587439, mas funciona diretamente na instância do controlador (em vez de acessar HttpContext.Current).
Na janela 'Watch', eu vi que this.RequestContext.WebRequest contém a propriedade 'UserHostAddress', mas como ela depende do tipo WebHostHttpRequestContext (que é interno ao assembly 'System.Web.Http') - eu não era capaz de acessá-lo diretamente, então usei reflexão para acessá-lo diretamente:
string hostAddress = ((System.Web.HttpRequestWrapper)this.RequestContext.GetType().Assembly.GetType("System.Web.Http.WebHost.WebHostHttpRequestContext").GetProperty("WebRequest").GetMethod.Invoke(this.RequestContext, null)).UserHostAddress;
Não estou dizendo que é a melhor solução. usar reflexão pode causar problemas no futuro em caso de atualização do framework (devido a mudanças de nome), mas para minhas necessidades é perfeito
fonte
Isso funciona em mim.
System.Web.HttpContext.Current.Request.UserHostName;
este me retorna o mesmo retorno que recebo doUserHostAddress
.fonte