2012-06-15 2 views

ответ

5

Проблема с HttpContext.Request.Current.UserHostAddress заключается в том, что HttpContext.Request.Current имеет значение null, если вы являетесь владельцем самостоятельно.

, как вы получите его в текущей версии SignalR приложения («DEV» филиал по состоянию на 12/14/2012), как так:

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

Вы использовали, чтобы иметь возможность получить его через Context.ServerVariables :

protected string GetIpAddress() 
{ 
    var ipAddress = Context.ServerVariables["REMOTE_ADDR"]; 
    return ipAddress; 
} 

Это было намного проще, но они устранили его по причинам, которые я не совсем понимаю.

+0

Предположите, что никто не использует ветвь dev (если явно не указано), поскольку она представляет точку во времени, которая может меняться в любое время между выпуском. – davidfowl

+1

Отмечая это как ответ, так как Owin теперь является в основном частью ASP.NET SignalR. –

0

Согласно source code нет, такой недвижимости в HubCallerContext нет.

26

С SignalR 2.0, Context.Request больше нет (не то, что я видел) Items. Я понял, как это работает сейчас. (Вы можете уменьшить, если/еще часть в тройном оператора, если вам это нравится.)

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; 
    } 
+6

Хорошо округленный ответ. В простейшей форме вы можете использовать 'Context.Request.Environment [" server.RemoteIpAddress "]' –

1

Другой путь

var serverVars = Context.Request.GetHttpContext().Request.ServerVariables; 
var Ip = serverVars["REMOTE_ADDR"]; 
Смежные вопросы