2012-12-15 17 views

Odpowiedz

5

Cóż, podczas grzebania w ostatnich zatwierdzeniach projektu SignalR (konkretnie this one), zauważyłem, jak to zrobić.

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

pytania o oddział dev na StackOverflow ma sensu, ponieważ masy nie będzie miał pojęcia, co mówisz . Tylko FYI – davidfowl

+0

@dfowler - Przyznane - ale starałem się unikać zgłaszania tych pytań jako "problemów" na twoim GitHubie, ponieważ widziałem, jak żujesz innych ludzi, próbując ich użyć do tego celu:). Czy jest lepsza opcja? –

+1

Użyj github, gdy jest coś takiego. Nikt nie będzie w stanie tu odpowiedzieć. Oddział dev nie jest czymś, co można przewidzieć, więc odpowiedzi zawsze będą błędne i raczej nie będę ich publicznie udostępniać. – davidfowl

5

nie próbowałem go z self-hosted SignalR Hub, ale z SignalR 2.0 Context.Request nie ma Items już (przynajmniej nie tego co widziałem). Rozgryzłem, jak to działa teraz. (Można zmniejszyć jeśli/część innego operatora do potrójnego, jeśli to lubisz.)

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

Inną formą tego jako jednolinijki jest 'Context.Request.Environment [" server.RemoteIpAddress "]. ToString();' –

Powiązane problemy