在ASP.NET中有一个System.Web.HttpRequest
类,它包含ServerVariables
属性,它可以从REMOTE_ADDR
属性值中为我们提供IP地址。
但是,我找不到类似的方法从ASP.NET Web API获取远程主机的IP地址。
如何获取发出请求的远程主机的IP地址?
发布于 2012-03-06 01:40:19
这样做是可能的,但不是很容易发现-您需要使用传入请求中的属性包,并且您需要访问的属性取决于您是在IIS (webhosted)下使用Web API还是在自托管下使用Web API。下面的代码展示了如何做到这一点。
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;
}
发布于 2013-08-09 10:51:56
如果您真的想要一个一行程序,并且不打算自托管Web API:
((System.Web.HttpContextWrapper)Request.Properties["MS_HttpContext"]).Request.UserHostAddress;
发布于 2014-05-14 21:55:33
上面的答案需要引用System.Web才能将属性强制转换为HttpContext或HttpContextWrapper。如果你不想要引用,你可以使用动态获取ip:
var host = ((dynamic)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
https://stackoverflow.com/questions/9565889
复制相似问题