2012-12-15 15 views

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); 
} 
+0

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

+0

@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? –

+1

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

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();' –

Problemi correlati