Ответ 1
IP = ((HttpContextBase)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
Я пробовал Request.UserHostAddress;
, но в контроллере API отсутствует UserHostAddress внутри запроса.
IP = ((HttpContextBase)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
Я использую следующий код, и он работает для меня....
string ipAddress = System.Web.HttpContext.Current.Request.UserHostAddress;
Согласно 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"];