2012-12-15 17 views

Antwort

5

Nun, in den letzten Commits auf dem SignalR Projekt (speziell this one) stocherte ich, wie ich es mache.

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

Fragen über die dev-Zweig auf Stackoverflow macht wenig Sinn, da die Massen keine Ahnung, was du redest . Nur ein FYI – davidfowl

+0

@dfowler - Zugegeben - aber ich habe versucht, diese Fragen als "Probleme" auf Ihrem GitHub zu vermeiden, wie ich gesehen habe Sie andere Leute kauen für den Versuch, sie für diesen Zweck zu verwenden: -). Gibt es eine bessere Option? –

+1

Verwenden Sie Github, wenn es so etwas ist. Niemand wird Ihnen hier antworten können. Der Entwicklerzweig ist nicht etwas, was du vorhersagen kannst, daher werden die Antworten immer falsch sein und ich habe sie lieber nicht in der Öffentlichkeit. – davidfowl

5

Ich versuche es mit dem selbst gehosteten SignalR Hub, aber mit SignalR 2.0 Context.Request nicht die Items mehr (zumindest nicht, was ich sah). Ich habe herausgefunden, wie es jetzt funktioniert. (Können Sie reduzieren die if/else Teil zu einem ternären Operator, wenn Sie so.)

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

Eine andere Form von diesem als ein Liner ist 'Context.Request.Environment [" server.RemoteIpAddress "]. ToString();' –

Verwandte Themen