ASP.NET Core 取得 IP

在 Service 層中可以透過注入 IHttpContextAccessor 服務來取得 IP:
    
public class MyService(IHttpContextAccessor httpContextAccessor)
{
    public void GetIp()
    {
        string? ip = httpContextAccessor.HttpContext?.Connection.RemoteIpAddress?.ToString();
    }
}
    

如果有反向代理伺服器,很可能就無法取得到正確的 IP 位置,這時候就可以檢查 Header 中是否有包含 X-Forwarded-For 資訊,許多反向代理伺服器都會將使用者的 IP 儲存在這個位置提供給伺服器:
    
public class MyService(IHttpContextAccessor httpContextAccessor)
{
    public void GetIp()
    {
        string? ip = httpContextAccessor.HttpContext?.Request.Headers["X-Forwarded-For"].FirstOrDefault();
        if (string.IsNullOrWhiteSpace(ip))
            ip = httpContextAccessor.HttpContext?.Connection.RemoteIpAddress?.ToString();
    }
}
    

留言