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

ASP.NET MVC 2017-02-25 119阅读 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地址的静态扩展类

文章评论

获取验证码