我们正在编写一个 ASP.NET 5 (vNext) 应用程序,该应用程序部分包括根据用户的 IP 地址对用户的位置进行地理编码。我们尝试使用以下代码获取客户端的 IP 地址,这些代码是从网络上的许多示例中找到的:
var connection = context.HttpContext.GetFeature<IHttpConnectionFeature>();
if (connection != null) {
clientIpAddress = connection.RemoteIpAddress.ToString();
}
当我们记录来自IHttpConnectionFeature
clientIpAddress
时,我们发现IP地址不正确。
但是,我们确实注意到 IIS 正在捕获正确的客户端 IP 地址。我们通过 IIS 控制面板检查请求来看到这一点。
因此,在 IIS 请求和我们的应用程序代码之间的某个地方,客户端的 IP 地址正在被修改,或者我们的应用程序代码无法在 IIS 中正常工作。或者 IIS 是否可能在破译客户端的 IP 地址方面执行额外的工作 - 我们需要在应用程序代码中模仿的工作。
为什么客户端的 IP 地址在 IIS 请求日志中是正确的,但在上面的应用程序代码中不正确?我们如何在代码中获取正确的客户端 IP 地址?
相关软件版本:
- ASP.NET 5 (vNext)
- KRE 1.0.0-beta2
- IIS 8
更新:我们在同一台 IIS 服务器上运行了一个 .NET 4.5 应用程序,该应用程序使用 Request.UserHostAddress
检索 IP 地址,它还检索了正确的 IP(IIS 正在记录的 IP),因此这似乎是新的 .NET 5 代码的问题。
由于Microsoft.AspNet.Loader.IIS
包中的一个错误。幸运的是,Microsoft的家伙迅速发布了修复程序。
有关更多上下文,请参阅 Github 问题:https://github.com/aspnet/HttpAbstractions/issues/181