首页 > 解决方案 > ASP.NET Core 3.1 - 如何获取客户端的 IP 地址?

问题描述

我有一个 Razor 页面 Web 应用程序,并且正在记录用户的 IP 地址。出于某种原因,它返回的是 IP 地址,而不是客户端的用户 IP 地址。我相信它可能会从服务器返回IP?

注意: 我已经在所有其他 ASP.NET Web 窗体应用程序中添加了用户登录,并且它正在记录正确的 IP。这是我们唯一的 ASP.NET Core 应用程序,它返回一个不同的 IP。

我是否在 ConfigureServices 方法中遗漏了一些阻止它获取用户 IP 地址的内容?

我在启动类中的 ConfigureServices 方法中的代码:

public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<ForwardedHeadersOptions>(options =>
        {
            options.ForwardedHeaders =
            ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
        });

        services.AddRazorPages().AddRazorRuntimeCompilation();
        services.AddAntiforgery(option =>
        {
            option.HeaderName = "XSRF-TOKEN";
            option.SuppressXFrameOptionsHeader = false;
        });
        services.AddSession();
        services.AddMemoryCache();
    }

我也在 Configure 方法中调用 UserForwardedHeaders 方法,如下所示:

app.UseForwardedHeaders();

我在检索 IP 地址时使用 RemoteIPAddress:

 HttpContext.Connection.RemoteIpAddress.ToString() 

标签: c#razor-pageshttpcontextasp.net-core-3.1

解决方案


var ipAddr = HttpContext.Connection.RemoteIpAddress.ToString();

{::1}当您在本地执行代码时,这将返回。部署到测试或生产服务器后,它将获取您客户端的 IP

var deviceName = Dns.GetHostEntry(HttpContext.Connection.RemoteIpAddress).HostName;

它用于查找 Intranet 应用程序的计算机名称。


推荐阅读