gpt4 book ai didi

asp.net-mvc-4 - 获取连接的IP地址

转载 作者:行者123 更新时间:2023-12-01 02:40:09 25 4
gpt4 key购买 nike

我想处理每个信号器连接到我的集线器的 IP 地址和用户代理。为此,我重写了 OnConnected 方法,如下所示。

        public override Task OnConnected()
{
string UserAgent = Context.Headers["User-Agent"];

var Request = Context.Request.GetHttpContext().Request;
string IPAddress = Request.UserHostAddress;

// code to process IP address and user agent goes here

return base.OnConnected();
}

是否有更可靠的方法来检索 IP 地址?对 Context.Request.GetHttpContext().Request 的调用有时会失败。使用 fiddler,我可以看到如果将 Web 套接字用于底层连接,则会发生大多数故障。

最佳答案

我建议直接从 OWIN 的环境字典中提取 IP 地址:

Request.GetHttpContext() 实际上是通过从环境字典中获取 HttpContextBase 来工作的:

/// <summary>
/// Returns the <see cref="HttpContextBase"/> for this <see cref="IRequest"/>.
/// </summary>
/// <param name="request">The request</param>
public static HttpContextBase GetHttpContext(this IRequest request)
{
object httpContextBaseValue;
if (request.Environment.TryGetValue(typeof(HttpContextBase).FullName, out httpContextBaseValue))
{
return httpContextBaseValue as HttpContextBase;
}

return null;
}

您可以专门为获取 IP 地址编写类似的内容:

public static string GetRemoteIpAddress(this IRequest request)
{
object ipAddress;
if (request.Environment.TryGetValue("server.RemoteIpAddress", out ipAddress))
{
return ipAddress as string;
}
return null;
}

这不仅可能更健壮,而且如果您将您的应用程序移植到另一个网络服务器(或者可能是自托管),它还有更好的机会继续工作。

关于asp.net-mvc-4 - 获取连接的IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20081476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com