RemoteIpAddress始终为null

时间:2016-02-16 19:34:04

标签: asp.net-core asp.net-core-mvc asp.net-core-1.0

var test1 = HttpContext.Features.Get<IHttpConnectionFeature>();
var test2 = HttpContext.Connection.RemoteIpAddress;

IISExpress 上本地运行应用程序时,这两行正确返回值0:0:1

当我在 IIS 7.5 (在VM上运行)上发布应用程序时。 RemoteIpAddress始终为null

我正在使用 ASP.Net 5 RC 1

如何在 ASP.NET 5 应用程序中获取客户端的IP地址?

我在以下问题中尝试了解决方案,但是我遇到了上述问题:

3 个答案:

答案 0 :(得分:9)

您所看到的内容是准确的,如果没有用的话。 IIS终止连接,然后转发到v.next Web服务器Kestrel,因此与Web服务器的连接确实来自localhost。

您需要做的是启用对X-Forwarded-For

的支持
  1. 添加Microsoft.AspNet.HttpOverrides
  2. Configure()方法中添加

        app.UseOverrideHeaders(new OverrideHeaderMiddlewareOptions
        {
            ForwardedOptions = ForwardedHeaders.XForwardedFor | 
                               ForwardedHeaders.XForwardedProto
        });
    
  3. 请注意,此程序包将在RC2中更改,以使其更安全。

答案 1 :(得分:3)

ASP.NET Core 2.0项目中,您需要添加包Microsoft.AspNetCore.HttpOverrides并将此代码添加到Configure方法中:

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

答案 2 :(得分:1)

那是因为您正尝试从localhost连接。如果您在同一局域网中有另一台计算机,请尝试与此计算机连接,但使用用户ip代替本地主机。