Asp.net

ASP.NET Core:如何獲取遠端 IP 地址?

  • July 30, 2020

我嘗試獲取遠端(客戶端)IP 地址:

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

但它僅適用於本地請求(它將返回::1值)

當我從遠端機器載入頁面時,該值為空。IHttpConnectionFeature在這種情況下,我調查了Features集合中沒有。

為什麼?以及如何正確獲取遠端IP地址?

我知道這篇文章很舊,但我來這裡是為了尋找同樣的問題,最後我做到了:

在 project.json 添加依賴:

"Microsoft.AspNetCore.HttpOverrides": "1.0.0"

在 Startup.cs 中,在 Configure 方法中添加:

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

而且當然:

using Microsoft.AspNetCore.HttpOverrides;

然後,我得到了這樣的ip:

Request.HttpContext.Connection.RemoteIpAddress

就我而言,在 VS 中調試時,我總是得到 IpV6 localhost,但是當部署在 IIS 上時,我總是得到遠端 IP。

一些有用的連結: 如何在 ASP.NET CORE 中獲取客戶端 IP 地址?並且RemoteIpAddress 始終為空

::1 可能是因為:

IIS 處的連接終止,然後轉發到 v.next Web 伺服器 Kestrel,因此與 Web 伺服器的連接確實來自 localhost。(https://stackoverflow.com/a/35442401/5326387

引用自:https://stackoverflow.com/questions/36352215