mi sono imbattuto in questa ricerca di una soluzione per sapere se una richiesta è locale. Sfortunatamente la versione 1.1.0 di ASP.NET non ha un metodo IsLocal
su una connessione. Ho trovato una soluzione su un sito web chiamato Strathweb ma non è aggiornato.
Ho creato la mia estensione IsLocal
e sembra funzionare, ma non posso dire di averlo provato in tutte le circostanze, ma siete invitati a provarlo.
public static class IsLocalExtension
{
private const string NullIpAddress = "::1";
public static bool IsLocal(this HttpRequest req)
{
var connection = req.HttpContext.Connection;
if (connection.RemoteIpAddress.IsSet())
{
//We have a remote address set up
return connection.LocalIpAddress.IsSet()
//Is local is same as remote, then we are local
? connection.RemoteIpAddress.Equals(connection.LocalIpAddress)
//else we are remote if the remote IP address is not a loopback address
: IPAddress.IsLoopback(connection.RemoteIpAddress);
}
return true;
}
private static bool IsSet(this IPAddress address)
{
return address != null && address.ToString() != NullIpAddress;
}
}
Si chiama in un azione di controllo di utilizzare il bene Request
, vale a dire
public IActionResult YourAction()
{
var isLocal = Request.IsLocal();
//... your code here
}
Mi auguro che aiuta qualcuno.
fonte
2016-12-20 12:34:51
Prestare attenzione all'utilizzo di 'HttpContext.Connection.IsLocal'. Mi sembra che l'uso di 'HttpContext.Connection.RemoteIpAddress' è ** modo più sicuro **. Se mi collego per testare localmente il progetto RC1 di ASP.NET 5, vedo ':: 1' in 'RemoteIpAddress', ma' HttpContext.Connection.IsLocal' è 'false'. È sbagliato. – Oleg
Cheers Oleg, quello che hai detto si è rivelato vero anche per me. –
Anche io ho lo stesso comportamento.È sempre '' 'false''' localmente. –