Bonjour, j'ai besoin d'obtenir une adresse IP client qui demande une méthode dans l'api Web, j'ai essayé d'utiliser ce code à partir d' ici mais il renvoie toujours l'adresse IP locale du serveur, comment s'y rendre correctement?
HttpContext.Current.Request.UserHostAddress;
d'autres questions:
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
la source
la source
Réponses:
Le lien suivant pourrait vous aider. Voici le code du lien suivant.
référence: obtenant-le-client-ip-via-asp-net-web-api
Une autre façon de faire est ci-dessous.
reference: comment accéder à l'adresse IP du client
Pour la version hébergée sur le Web
Pour auto-hébergé
la source
Avec l'API Web 2.2:
Request.GetOwinContext().Request.RemoteIpAddress
la source
Essayez d'obtenir l'IP en utilisant
la source
Si vous vous auto-hébergez avec Asp.Net 2.1 à l'aide du package NuGet OWIN Self-host, vous pouvez utiliser le code suivant:
la source
En réponse à ce post vieux de 4 ans, car cela me semble trop compliqué, du moins si vous hébergez sur IIS et que ce post est très élevé sur DuckDuckGo (et probablement NSAoogle) pour "le contrôleur de l'API Web obtient l'adresse IP".
Voici comment je l'ai résolu:
Contrairement à OP, cela me donne l'adresse IP du client et le nom d'hôte du client, pas le serveur. Peut-être ont-ils corrigé le bogue depuis?
la source
Il est préférable de le lancer
HttpContextBase
, de cette façon, vous pouvez vous moquer et le tester plus facilementla source
Je pense que c'est la solution la plus claire, en utilisant une méthode d'extension:
Alors utilisez-le simplement comme:
Nous utilisons cela dans nos projets.
Source / Référence: récupération de l'adresse IP du client dans l'API Web ASP.NET
la source
Ma solution est similaire à la réponse de user1587439, mais fonctionne directement sur l'instance du contrôleur (au lieu d'accéder à HttpContext.Current).
Dans la fenêtre 'Watch', j'ai vu que this.RequestContext.WebRequest contient la propriété 'UserHostAddress', mais comme il repose sur le type WebHostHttpRequestContext (qui est interne à l'assembly 'System.Web.Http') - je ne l'étais pas capable d'y accéder directement, j'ai donc utilisé la réflexion pour y accéder directement:
string hostAddress = ((System.Web.HttpRequestWrapper)this.RequestContext.GetType().Assembly.GetType("System.Web.Http.WebHost.WebHostHttpRequestContext").GetProperty("WebRequest").GetMethod.Invoke(this.RequestContext, null)).UserHostAddress;
Je ne dis pas que c'est la meilleure solution. l'utilisation de la réflexion peut causer des problèmes à l'avenir en cas de mise à niveau du framework (en raison de changements de nom), mais pour mes besoins, c'est parfait
la source
Cela fonctionne sur moi.
System.Web.HttpContext.Current.Request.UserHostName;
celui-ci me renvoie le même retour que je reçois duUserHostAddress
.la source