Get the IP address of the remote host
asp.net-web-api, c#
Solution
It's possible to do that, but not very discoverable - you need to use the property bag from the incoming request, and the property you need to access depends on whether you're using the Web API under IIS (webhosted) or self-hosted. The code below shows how this can be done.
private string GetClientIp(HttpRequestMessage request)
{
if (request.Properties.ContainsKey("MS_HttpContext"))
{
return ((HttpContextWrapper)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
}
if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name))
{
RemoteEndpointMessageProperty prop;
prop = (RemoteEndpointMessageProperty)request.Properties[RemoteEndpointMessageProperty.Name];
return prop.Address;
}
return null;
}
Problem
In ASP.NET there is a `System.Web.HttpRequest` class, which contains `ServerVariables` property which can provide us the IP address from `REMOTE_ADDR` property value. However, I could not find a similar way to get the IP address of the remote host from ASP.NET Web API. How can I get the IP address of the remote host that is making the request?