Signalr 在自托管信号器集线器中获取客户端IP地址

Signalr 在自托管信号器集线器中获取客户端IP地址,signalr,Signalr,如何在自托管信令集线器中获取远程客户端的IP地址?根据,您可以在某一点上使用Context.ServerVariables[]获得它,但最新版本的SignalR中似乎缺少了这一点。好吧,在最近提交的SignalR项目(特别是)中,我发现了如何做到这一点 protected string GetIpAddress() { var env = Get<IDictionary<string, object>>(Context.Request.Items, "owin.e

如何在自托管信令集线器中获取远程客户端的IP地址?根据,您可以在某一点上使用Context.ServerVariables[]获得它,但最新版本的SignalR中似乎缺少了这一点。

好吧,在最近提交的SignalR项目(特别是)中,我发现了如何做到这一点

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);
}
受保护的字符串GetIpAddress()
{
var env=Get(Context.Request.Items,“owin.environment”);
if(env==null)
{
返回null;
}
var ipAddress=Get(env,“server.RemoteIpAddress”);
返回IP地址;
}
私有静态T Get(IDictionary env,字符串键)
{
目标价值;
返回环境TryGetValue(key,out value)-(T)值:默认值(T);
}

我没有在自托管的SignalR Hub上尝试,但在SignalR 2.0上,
上下文。Request
不再有
项(至少不是我看到的)。我明白了,它现在是怎么工作的。(如果愿意,可以将if/else部分减少为三元运算符。)


在stackoverflow上询问有关开发分支的问题没有什么意义,因为群众不知道你在说什么。只是一个FYI@dfowler-当然-但我一直在努力避免在你的GitHub上把这些问题作为“问题”提出来,因为我看到你为了达到这个目的而责骂其他人:-)。有更好的选择吗?在类似这样的情况下使用github。这里没有人能回答你。开发分支不是你可以预测的东西,所以答案总是错误的,我宁愿不把它们放在报告中public@dfowler-可以。谢谢。作为一行程序的另一种形式是
Context.Request.Environment[“server.RemoteIpAddress”].ToString()
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;
}