号外号外: 原[图享网]更名为 码友网(codedefault.com) 啦,感谢大家一路上的陪伴与支持。代码的世界里,码友网与大家一起同行!

ASP.NET Web Api 2 控制器中获取客户端IP地址的静态扩展类

ASP.NET MVC 作者: Rector 1621阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

ASP.NET的MVC应用程序中,如果想在控制器中获取来自客户端的IP地址,我们可以直接通过访问Controller.Request中的UserHostAddress的属性来获取[Request.UserHostAddress],但在ASP.NET Web Api 的控制器中,我们是有能直接访问到Controller.Request这个属性的,而是ApiController.Request这个属性。在这个属性中没有UserHostAddress的成员,所以我们就不能直接通过Request.UserHostAddress属性来获取到客户端的IP地址,那么又有什么办法来获取到客户端的IP地址呢?答案如下,我们可以HttpContext中的特定属性值来提取客户端的IP地址,具体的静态扩展类和方法如下:

public static class HttpRequestMessageExtensions
{
    private const string HttpContext = "MS_HttpContext";
    private const string RemoteEndpointMessage = "System.ServiceModel.Channels.RemoteEndpointMessageProperty";

    public static string GetClientIpAddress(this HttpRequestMessage request)
    {
        if (request.Properties.ContainsKey(HttpContext))
        {
            dynamic ctx = request.Properties[HttpContext];
            if (ctx != null)
            {
                return ctx.Request.UserHostAddress;
            }
        }

        if (request.Properties.ContainsKey(RemoteEndpointMessage))
        {
            dynamic remoteEndpoint = request.Properties[RemoteEndpointMessage];
            if (remoteEndpoint != null)
            {
                return remoteEndpoint.Address;
            }
        }

        return null;
    }
}

调用的方法就很简单了,如在一个ApiController控制器中的Action方法中:

var ipAddress = Request.GetClientIpAddress();

阅读了该文章的人还浏览了...

本文永久链接码友网 » ASP.NET Web Api 2 控制器中获取客户端IP地址的静态扩展类

发布于: 2017-02-25 18:36:59
分享扩散:

文章评论

获取验证码