首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取远程主机的IP地址

获取远程主机的IP地址
EN

Stack Overflow用户
提问于 2012-03-05 19:30:43
回答 5查看 83.7K关注 0票数 145

在ASP.NET中有一个System.Web.HttpRequest类,它包含ServerVariables属性,它可以从REMOTE_ADDR属性值中为我们提供IP地址。

但是,我找不到类似的方法从ASP.NET Web API获取远程主机的IP地址。

如何获取发出请求的远程主机的IP地址?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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;
}
票数 201
EN

Stack Overflow用户

发布于 2013-08-09 10:51:56

如果您真的想要一个一行程序,并且不打算自托管Web API:

((System.Web.HttpContextWrapper)Request.Properties["MS_HttpContext"]).Request.UserHostAddress;
票数 33
EN

Stack Overflow用户

发布于 2014-05-14 21:55:33

上面的答案需要引用System.Web才能将属性强制转换为HttpContext或HttpContextWrapper。如果你不想要引用,你可以使用动态获取ip:

var host = ((dynamic)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9565889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档