您如何在自托管 SignalR 集线器中获取远程客户端的 IP 地址?根据这个问题,您可以在某一时刻使用 Context.ServerVariables[] 获取它,但这似乎在最新版本的 SignalR 中缺失。
问问题
6945 次
2 回答
6
好吧,在最近对 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);
}
于 2012-12-15T05:13:31.170 回答
5
我没有尝试使用自托管的 SignalR Hub,但使用 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-27T08:01:14.637 回答