2012-09-26 26 views

Trả lời

16
IP = ((HttpContextBase)request.Properties["MS_HttpContext"]).Request.UserHostAddress; 
6

Theo this, một cách hoàn chỉnh hơn sẽ là:

private string GetClientIp(HttpRequestMessage request) 
{ 
    if (request.Properties.ContainsKey("MS_HttpContext")) 
    { 
     return ((HttpContext)request.Properties["MS_HttpContext"]).Request.UserHostAddress; 
    } 
    else if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name)) 
    { 
     RemoteEndpointMessageProperty prop; 
     prop = (RemoteEndpointMessageProperty)this.Request.Properties[RemoteEndpointMessageProperty.Name]; 
     return prop.Address; 
    } 
    else 
    { 
     return null; 
    } 
} 

Trong quá khứ, trên MVC 3 dự án (không API,), chúng tôi sử dụng để sử dụng như sau:

string IPAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 

if (String.IsNullOrEmpty(IPAddress)) 
    IPAddress = Request.ServerVariables["REMOTE_ADDR"]; 
+1

Tôi đã kết thúc nghiên cứu thêm một chút bởi vì nó cảm thấy kỳ lạ mà bạn sẽ nhận một tiêu đề yêu cầu trong một biến máy chủ. context.Request.ServerVariables ["HTTP_X_FORWARDED_FOR"] là chọn lên những gì được chọn lên tiêu đề yêu cầu X-Forward-For được gửi bởi Proxy Server và Load Balancers. – muglio

11

Tôi đang sử dụng mã sau và nó hoạt động cho tôi ....

string ipAddress = System.Web.HttpContext.Current.Request.UserHostAddress; 
+0

Nó cung cấp địa chỉ máy chủ –

Các vấn đề liên quan