Как получить IP-адрес пользователя в ASP.NET MVC API-контроллер

Я пробовал Request.UserHostAddress;, но в контроллере API отсутствует UserHostAddress внутри запроса.

Ответы

Ответ 1

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

Ответ 2

Я использую следующий код, и он работает для меня....

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

Ответ 3

Согласно this, более полным способом будет:

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

В прошлом в проектах MVC 3 (а не API) мы использовали следующее:

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

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