首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C# 獲取客戶端 IP 顯示 ::1 的原因:IPv6 回環地址解析

     編輯:程式設計疑難解答

現象

ASP.NET 中 Request.UserHostAddress 返回 ::1,而非預期的 IPv4 如 127.0.0.1 或局域網 IP。

原因

::1 是 IPv6 回環地址,等同於 IPv4 的 127.0.0.1。當瀏覽器與伺服器在**同一台機器**且系統啟用 IPv6 時,ASP.NET 優先解析為 IPv6 回環。

驗證方法

  • 在**另一台電腦**訪問該站點,UserHostAddress 將顯示真實的 IPv4/IPv6 公網/局域網地址。
  • 或在伺服器 hosts 文件禁用 IPv6 回環(不推薦)。

代碼相容處理

string ip = Request.UserHostAddress;
if (ip == "::1") ip = "127.0.0.1"; // 本地測試轉換
// 或統一用 IPAddress.Parse(ip).MapToIPv4().ToString() 轉為 IPv4 格式

生產環境注意

若部署在反向代理(Nginx/IIS ARR)後方,需讀取 X-Forwarded-For 標頭:

string ip = Request.Headers["X-Forwarded-For"] ?? Request.UserHostAddress;

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved