Hallo, ich brauche eine Client-IP, die eine Methode in der Web-API anfordert. Ich habe versucht, diesen Code von hier aus zu verwenden , aber er gibt immer die lokale Server-IP zurück. Wie komme ich richtig?
HttpContext.Current.Request.UserHostAddress;
von anderen Fragen:
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
quelle
quelle
Antworten:
Der folgende Link könnte Ihnen helfen. Hier ist Code vom folgenden Link.
Referenz: Holen Sie sich die Client-IP über Asp-Net-Web-API
Eine andere Möglichkeit, dies zu tun, ist unten.
Referenz: Zugriff auf die Client-IP-Adresse
Für Web-gehostete Version
Für Selbst gehostete
quelle
Mit der Web-API 2.2:
Request.GetOwinContext().Request.RemoteIpAddress
quelle
Versuchen Sie, die IP mit zu bekommen
quelle
Wenn Sie mit Asp.Net 2.1 mithilfe des OWIN Self-Host NuGet-Pakets selbst hosten, können Sie den folgenden Code verwenden:
quelle
Antworten auf diesen 4 Jahre alten Beitrag, da mir dies zu kompliziert erscheint, zumindest wenn Sie auf IIS hosten und dieser Beitrag auf DuckDuckGo (und wahrscheinlich NSAoogle) für "Web-API-Controller IP-Adresse erhalten" sehr hoch ist.
So habe ich es gelöst:
Im Gegensatz zu OP gibt mir dies die Client-IP und den Client-Hostnamen, nicht den Server. Vielleicht haben sie den Fehler seitdem behoben?
quelle
Es ist besser, es zu
HttpContextBase
besetzen, auf diese Weise können Sie es leichter verspotten und testenquelle
Ich denke, dies ist die klarste Lösung mit einer Erweiterungsmethode:
Verwenden Sie es also einfach wie folgt:
Wir verwenden dies in unseren Projekten.
Quelle / Referenz: Abrufen der IP-Adresse des Clients in der ASP.NET-Web-API
quelle
Meine Lösung ähnelt der Antwort von user1587439, funktioniert jedoch direkt auf der Instanz des Controllers (anstatt auf HttpContext.Current zuzugreifen).
Im 'Watch'-Fenster habe ich gesehen, dass this.RequestContext.WebRequest die Eigenschaft' UserHostAddress 'enthält, aber da es auf dem Typ WebHostHttpRequestContext basiert (der in der Assembly' System.Web.Http 'enthalten ist) - war ich nicht Ich konnte direkt darauf zugreifen, also habe ich Reflection verwendet, um direkt darauf zuzugreifen:
string hostAddress = ((System.Web.HttpRequestWrapper)this.RequestContext.GetType().Assembly.GetType("System.Web.Http.WebHost.WebHostHttpRequestContext").GetProperty("WebRequest").GetMethod.Invoke(this.RequestContext, null)).UserHostAddress;
Ich sage nicht, dass es die beste Lösung ist. Die Verwendung von Reflection kann im Falle eines Framework-Upgrades (aufgrund von Namensänderungen) in Zukunft zu Problemen führen, ist jedoch für meine Anforderungen perfekt
quelle
Das funktioniert bei mir.
System.Web.HttpContext.Current.Request.UserHostName;
Dieser gibt mir die gleiche Rendite zurück, die ich von der bekommeUserHostAddress
.quelle