In che modo si ottiene l'indirizzo IP del client remoto in un hub SignalR self-hosted? Secondo this question, è possibile ottenerlo utilizzando Context.ServerVariables [], ma sembra che manchi dall'ultima versione di SignalR.Ottieni l'indirizzo IP del client nell'hub SignalR self-hosted
5
A
risposta
5
Bene, nel sondare i recenti commit sul progetto SignalR (in particolare this one), ho notato come farlo.
protected string GetIpAddress()
{
var env = Get<IDictionary<string, object>>(Context.Request.Items, "owin.environment");
if (env == null)
{
return null;
}
var ipAddress = Get<string>(env, "server.RemoteIpAddress");
return ipAddress;
}
private static T Get<T>(IDictionary<string, object> env, string key)
{
object value;
return env.TryGetValue(key, out value) ? (T)value : default(T);
}
5
non ho provato con il self-hosted SignalR Hub, ma con SignalR 2.0, Context.Request
non ha la Items
più (almeno non quello che ho visto). Ho capito, come funziona ora. (È possibile ridurre il se/parte altro da un operatore ternario, se vi piace che.)
protected string GetIpAddress()
{
string ipAddress;
object tempObject;
Context.Request.Environment.TryGetValue("server.RemoteIpAddress", out tempObject);
if (tempObject != null)
{
ipAddress = (string)tempObject;
}
else
{
ipAddress = "";
}
return ipAddress;
}
+3
Un'altra forma di questo come one-liner è 'Context.Request.Environment [" server.RemoteIpAddress "]. ToString();' –
Fare domande circa il ramo dev su StackOverflow ha poco senso come le masse non hanno idea di cosa si sta parlando . Solo una FYI – davidfowl
@dfowler - Concessa - ma ho cercato di evitare di sollevare queste domande come "problemi" sul tuo GitHub, come ho visto che mastichi altre persone per aver provato a usarle a tale scopo: -). C'è un'opzione migliore? –
Usa github quando è qualcosa di simile. Nessuno sarà in grado di risponderti qui. Il ramo dev non è qualcosa che puoi prevedere, quindi le risposte saranno sempre sbagliate e preferisco non averle in pubblico – davidfowl