是否可以通过 HubCallerContext 获取调用者的 IP 地址?还是我必须通过 HttpContext.Current...ServerVariables 才能得到它?
			
			18374 次
		
5 回答
            30        
        
		
使用 SignalR 2.0,Context.Request不再有Items(至少不是我所看到的)。我现在知道它是如何工作的。(如果您愿意,可以将 if / else 部分简化为三元运算符。)
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;
}
于 2013-11-27T05:56:38.630   回答
    
    
            5        
        
		
问题HttpContext.Request.Current.UserHostAddress在于,HttpContext.Request.Current如果您是自托管的,那么它是空的。
在当前版本的 SignalR(截至 2012 年 12 月 14 日的“开发”分支)中获取它的方式如下:
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;
}
那要简单得多,但他们出于我不完全理解的原因将其删除。
于 2012-12-05T22:31:15.900   回答
    
    
            1        
        
		
根据源码没有,HubCallerContext中没有这个属性。
于 2012-06-15T06:21:05.887   回答
    
    
            1        
        
		
另一种方式是
var serverVars = Context.Request.GetHttpContext().Request.ServerVariables;
var Ip = serverVars["REMOTE_ADDR"];
于 2016-03-06T22:45:30.970   回答
    
    
            0        
        
		
你试过 HttpContext.Request.UserHostAddress 吗?在此处查看此示例:http: //jameschambers.com/blog/continuous-communication-bridging-the-client-and-server-with-signalr
不要认为这完全是您所希望的,但仍然应该解决问题。
于 2012-06-18T14:30:26.393   回答