2014-11-25 61 views
15

Qual è l'equivalente in Asp.Net 5 del vecchio HttpContext.Request.UserHostAddress?UserHostAddress in Asp.net Core

Ho provato this.ActionContext.HttpContext ma non riesco a trovare le proprietà UserHostAddress né le proprietà di ServerVariables.

Grazie

risposta

9

Questo è stato spostato da quando è stata pubblicata la risposta originale. L'accesso è ora via

httpContext.Features.Get<IHttpConnectionFeature>()?.RemoteIpAddress 
+0

Questo è sempre 'nullo' per me. (Distribuisco il sito Web su IIS su una VM) –

11

HttpRequest.UserHostAddress dà l'indirizzo IP del client remoto. In ASP.NET Core 1.0, è necessario utilizzare la funzionalità di connessione HTTP per ottenere lo stesso. HttpContext ha il metodo GetFeature<T> che è possibile utilizzare per ottenere una funzionalità specifica. Ad esempio, se si desidera recuperare l'indirizzo IP remoto da un metodo di azione del controller, è possibile fare qualcosa di simile.

var connectionFeature = Context 
      .GetFeature<Microsoft.AspNet.HttpFeature.IHttpConnectionFeature>(); 

if (connectionFeature != null) 
{ 
    string ip = connectionFeature.RemoteIpAddress.ToString(); 
} 
+0

ringrazio molto questo funziona, non avrei mai arrivato a questo me stesso. Dove posso trovare una documentazione o qualche riferimento? Sto anche cercando il vecchio HttpContext.Request.ServerVariables ["X_FORWARDED_FOR"]; Sai qual è la nuova sintassi a questo? Grazie! –

+2

Sembra non funzionare correttamente quando è in esecuzione in IIS 8. L'indirizzo IP restituito nel codice è diverso da quello che IIS emette nel registro delle richieste. Eventuali aggiornamenti a ciò che consentirebbe di funzionare correttamente in IIS? –

0

Per aspnet RC1-update1 ho trovato IP (con porta) in X-Forwarded-For intestazione, che il suo valore si può accedere da controller come HttpContext.Request.Headers["X-Forwarded-For"].FirstOrDefault().

+0

Questa intestazione è in genere presente solo se la richiesta è passata attraverso un servizio di bilanciamento del carico (o qualcosa di simile) per aggiungere l'indirizzo originale. –

1

Se si ha accesso al HttpContext, è possibile ottenere il locale/IpAddress remoto dalla proprietà Connection in questo modo:

var remote = this.HttpContext.Connection.RemoteIpAddress; 
var local = this.HttpContext.Connection.LocalIpAddress;