请问如何在ASP中获取客户端IP地址?NET时使用MVC 6。 请求。ServerVariables["REMOTE_ADDR"]无效。


当前回答

var remoteIpAddress = HttpContext.Features.Get<IHttpConnectionFeature>()?.RemoteIpAddress;

其他回答

第一次添加

Microsoft.AspNetCore.Http
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

在Startup.cs中的ConfigureServices中 然后在控制器中添加以下代码

   private IHttpContextAccessor _accessor;
    
  public LoginController(IHttpContextAccessor accessor)
            {
              _accessor = accessor;
            }

  public IEnumerable<string> Get()
        {
         var ip = _accessor.HttpContext?.Connection?.RemoteIpAddress?.ToString();
         return new string[] { ip, "value" };
        }

希望这对你有用

您可以使用IHttpConnectionFeature来获取此信息。

var remoteIpAddress = httpContext.GetFeature<IHttpConnectionFeature>()?.RemoteIpAddress;

运行ASP。在Ubuntu上的Traefik反向代理后面的NET Core 2.1,我需要在安装官方的Microsoft.AspNetCore.HttpOverrides包后在knownproxy中设置它的网关IP

        var forwardedOptions = new ForwardedHeadersOptions {
            ForwardedHeaders = ForwardedHeaders.XForwardedFor,
        };
        forwardedOptions.KnownProxies.Add(IPAddress.Parse("192.168.3.1"));
        app.UseForwardedHeaders(forwardedOptions);

根据文档,如果反向代理没有在本地主机上运行,这是必需的。docker-compose。Traefik . yml已分配静态IP地址:

networks:
  my-docker-network:
    ipv4_address: 192.168.3.2

或者,它应该足以确保在这里定义了一个已知的网络,并在. net Core中指定其网关。

截至2021年9月- ASP。NET Core (5.x) MVC项目允许我在我的控制器中以这种方式获取IP地址:

Request.HttpContext.Connection.RemoteIpAddress

现在似乎比过去简单多了。

var remoteIpAddress = HttpContext.Features.Get<IHttpConnectionFeature>()?.RemoteIpAddress;