【问题标题】:RemoteIpAddress is always nullRemoteIpAddress 始终为空
【发布时间】:2016-02-16 19:34:04
【问题描述】:
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 地址?

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

【问题讨论】:

  • X-Forwarded-For 似乎在 RC1 U1 中默认设置为来自 Answer

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


【解决方案1】:

您看到的内容是准确的,即使没有用处。 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
        });
    

请注意,此包将在 RC2 中更改以使其使用更安全。

【讨论】:

  • 仍然为空。显然这是由于一个错误:github.com/aspnet/IISIntegration/issues/…
  • 啊该死的。迁移到 IIS8? 咧嘴一笑
  • nuget包现在是Microsoft.AspNetCore.HttpOverrides,配置方法是:app.UseForwardedHeaders(...)
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    那是因为你试图从 localhost 连接。如果您在同一局域网中有另一台计算机,请尝试与这台计算机连接,但使用用户 ip 而不是 localhost。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-31
      • 2019-07-18
      • 2019-08-18
      • 2011-12-29
      • 2019-07-02
      • 2019-05-04
      • 2011-05-04
      • 2015-10-29
      相关资源
      最近更新 更多