内容简介:在使用负载均衡的情况下,通过 context.Connection.RemoteIpAddress 获取到的是负载均衡的 IP 地址,需要通过 X-Forwarded-For 请求头才能获取到客户端的真实 IP 。之前采用的方式是自己直接获取 X-Forwarded-For 请求头,代码如下:现在改用 asp.net core 内置的 Forwarded Headers Middleware 来实现。
在使用负载均衡的情况下,通过 context.Connection.RemoteIpAddress 获取到的是负载均衡的 IP 地址,需要通过 X-Forwarded-For 请求头才能获取到客户端的真实 IP 。
之前采用的方式是自己直接获取 X-Forwarded-For 请求头,代码如下:
public static class HttpContextExtensions { public static string GetUserIp(this HttpContext context) { var ip = context.Request.Headers["X-Forwarded-For"].FirstOrDefault(); if (string.IsNullOrEmpty(ip)) { ip = context.Connection.RemoteIpAddress?.ToString(); } return GetSingleIP(ip); } private static string GetSingleIP(string ip) { if (!string.IsNullOrEmpty(ip)) { var commaIndex = ip.LastIndexOf(","); if (commaIndex >= 0) { ip = ip.Substring(commaIndex + 1); } } return ip; } }
现在改用 asp.net core 内置的 Forwarded Headers Middleware 来实现。
先在 Startup.ConfigureServices 中配置 ForwardedHeadersOptions ,对于获取客户端 IP 的场景只需要指定 ForwardedHeaders.XForwardedFor 。
services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; options.KnownNetworks.Clear(); options.KnownProxies.Clear(); });
注:如果负载均衡不是在本机通过 Loopback 地址转发请求的,一定要加上 options.KnownNetworks.Clear 与 options.KnownProxies.Clear 。
然后在 Startup.Configure 中添加 Forwarded Headers 中间件。
app.UseForwardedHeaders()
这样就可以通过 RemoteIpAddress 获取客户端的真实 IP 地址了。
var ip = Request.HttpContext.Connection.RemoteIpAddress?.MapToIPv4().ToString();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 客户端ip获取蹲坑启示: 不要侥幸
- Kubernets中获取客户端真实IP总结
- 服务器如何获取真实客户端 IP
- 【问题排查】tomcat无法获取客户端IP
- nginx获取客户端请求的真实IP
- 如何在C#中获取服务器和客户端之间的延迟?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Joy of X
Niall Mansfield / UIT Cambridge Ltd. / 2010-7-1 / USD 14.95
Aimed at those new to the system seeking an overall understanding first, and written in a clear, uncomplicated style, this reprint of the much-cited 1993 classic describes the standard windowing syste......一起来看看 《The Joy of X》 这本书的介绍吧!
UNIX 时间戳转换
UNIX 时间戳转换
HSV CMYK 转换工具
HSV CMYK互换工具