Tra*_*man 11 asp.net-mvc signalr
是否可以通过HubCallerContext获取呼叫者的IP地址?或者我是否必须通过HttpContext.Current ... ServerVariables来获取它?
小智 28
有了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;
}
Run Code Online (Sandbox Code Playgroud)
有问题HttpContext.Request.Current.UserHostAddress的是,HttpContext.Request.Current为空,如果你是自托管.
你在当前版本的SignalR中获得它的方式(截至12/14/2012的'dev'分支)是这样的:
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);
}
Run Code Online (Sandbox Code Playgroud)
你曾经能够通过Context.ServerVariables:
protected string GetIpAddress()
{
var ipAddress = Context.ServerVariables["REMOTE_ADDR"];
return ipAddress;
}
Run Code Online (Sandbox Code Playgroud)
这样做要简单得多,但是由于我不完全理解的原因,他们删除了它.
| 归档时间: |
|
| 查看次数: |
13688 次 |
| 最近记录: |