ASP.NET Core: How to get remote IP address?

走远了吗. 提交于 2019-12-03 13:34:41

问题


I try to get remote (client) IP addres:

var ip = httpContext.Features.Get<IHttpConnectionFeature>()?.RemoteIpAddress

But it works only for local requests (it will return ::1 value)

When I load page from remote machine the value is null. I investigated there is no IHttpConnectionFeature in the Features collection in this case.

Why? And how to get remote ip address correctly?


回答1:


I know that this post is old but I came here looking for the same question and finnaly I did this:

On project.json add dependency:

"Microsoft.AspNetCore.HttpOverrides": "1.0.0"

On Startup.cs, in the Configure method add:

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

And, of course:

using Microsoft.AspNetCore.HttpOverrides;

Then, I got the ip like this:

Request.HttpContext.Connection.RemoteIpAddress

In my case, when debugging in VS I got always IpV6 localhost, but when deployed on an IIS I got always the remote IP.

Some useful links: How do I get client IP address in ASP.NET CORE? and RemoteIpAddress is always null

The ::1 may be because:

Connections termination at IIS, which then forwards to Kestrel, the v.next web server, so connections to the web server are indeed from localhost. (https://stackoverflow.com/a/35442401/5326387)




回答2:


Just try this code,

var ipAddress = HttpContext.Connection.RemoteIpAddress;

And if you have another computer in same LAN, try to connect with this pc but use user ip instead of localhost. Otherwise you will get always ::1 result.




回答3:


Try this:

Request.ServerVariables["REMOTE_ADDR"];


来源:https://stackoverflow.com/questions/36352215/asp-net-core-how-to-get-remote-ip-address

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!