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();
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册