2012-09-26 28 views

Odpowiedz

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

Według this, pełniejszy sposób byłoby:

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; 
    } 
} 

W przeszłości na MVC 3 projektów (nie API,) zwykliśmy używać następujących:

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

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

Skończyłem robić trochę dodatkowych badań, ponieważ to było dziwne, że możesz odebrać nagłówek żądania w zmiennej serwerowej. context.Request.ServerVariables ["HTTP_X_FORWARDED_FOR"] zbiera informacje o odebraniu nagłówka żądania X-Forward-For wysłanego przez serwery proxy i moduły równoważenia obciążenia. – muglio

11

Korzystam z następującego kodu i to działa dla mnie ....

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

Podaje adres hosta –

Powiązane problemy