Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

วิธีดึง IP Address ของ Client ใน ASP.NET MVC C#

เครื่องแต่ละเครื่องบน Network มี Unique Identifier เหมือนกับที่คุณเขียนที่อยู่บนจดหมายเพื่อส่งทางไปรษณีย์ คอมพิวเตอร์ใช้ Unique Identifier เพื่อส่งข้อมูลไปยังคอมพิวเตอร์เฉพาะบน Network เครือข่ายส่วนใหญ่วันนี้ รวมถึงคอมพิวเตอร์ทั้งหมดบน Internet ใช้ TCP/IP Protocol เป็นมาตรฐานสำหรับการสื่อสารบน Network ใน TCP/IP Protocol Unique Identifier สำหรับคอมพิวเตอร์เรียกว่า IP Address

ใช้ HttpRequest.UserHostAddress Property

using System.Web.Mvc;

namespace DemoMvcApplication.Controllers {
    public class HomeController : Controller {
        public string Index() {
            string ipAddress = Request.UserHostAddress;
            return ipAddress;
        }
    }
}

ถ้าต้องการดึง IP Address นอกจาก Controller (ใน Class ธรรมดา) สามารถทำได้ดังนี้:

using System.Web;

namespace DemoMvcApplication.Helpers {
    public static class DemoHelperClass {
        public static string GetIPAddress() {
            string ipAddress = HttpContext.Current.Request.UserHostAddress;
            return ipAddress;
        }
    }
}

ใช้ ServerVariables

using System.Web.Mvc;

namespace DemoMvcApplication.Controllers {
    public class HomeController : Controller {
        public string Index() {
            string ipAddress = Request.ServerVariables["REMOTE_ADDR"];
            return ipAddress;
        }
    }
}

Output

วิธีดึง IP Address ของ Client ใน ASP.NET MVC C#

เนื่องจากเรา Run แอปพลิเคชันใน Localhost IP Address สำหรับ Localhost คือ ::1 ชื่อ Localhost ปกติ Resolve ไปยัง IPv4 Loopback Address 127.0.0.1 และ IPv6 Loopback Address ::1

การจัดการ Proxy และ Load Balancer (สำคัญ)

ใน Production Environment ที่อยู่หลัง Proxy หรือ Load Balancer UserHostAddress และ REMOTE_ADDR อาจให้ IP ของ Proxy แทน IP จริงของ Client ควรตรวจสอบ Header X-Forwarded-For:

public static string GetClientIpAddress(HttpRequestBase request) {
    // ตรวจสอบ X-Forwarded-For Header (สำหรับ Proxy/Load Balancer)
    string ip = request.Headers["X-Forwarded-For"];
    
    if (!string.IsNullOrEmpty(ip)) {
        // X-Forwarded-For อาจมีหลาย IP (client, proxy1, proxy2) 取第一個
        ip = ip.Split(',')[0].Trim();
    } else {
        // Fallback ไปที่ ServerVariables
        ip = request.ServerVariables["HTTP_X_FORWARDED_FOR"] 
             ?? request.ServerVariables["REMOTE_ADDR"]
             ?? request.UserHostAddress;
    }
    
    return ip;
}

ใน ASP.NET Core

public class HomeController : Controller {
    public IActionResult Index() {
        // ใช้ HttpContext.Connection.RemoteIpAddress
        var ipAddress = HttpContext.Connection.RemoteIpAddress?.ToString();
        
        // หรือถ้าอยู่หลัง Proxy ต้องตั้งค่า ForwardedHeaders Middleware
        // ใน Startup.ConfigureServices:
        // services.Configure(options => {
        //     options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
        // });
        
        return Content($"Your IP: {ipAddress}");
    }
}