首页 / ASP.NET MVC / 正文

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

7517 发布于: 2017-02-25 读完约需4分钟

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();

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: 微软通过官方博客发布微软系列产品开发文档的新地址[docs.microsoft.com]

下一篇: [C#]ASP.NET 中URL如何实现Winform中的Path.Combine的路径拼接方法

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

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册