Asp.Net MVC 迁移至Asp.NetCore MVC 中:获取负载均衡下 请求 IP 方式

      最近在搞一个项目,需要从 Asp.Net MVC 迁移至Asp.NetCore 3.0 (MVC );原始mvc 中有处理获取请求地址IP的方法,但是在Core 中已经不适用了;

       那么,如何获取客户端IP地址呢?                           (   https://q.cnblogs.com/q/87223/                                            https://www.cnblogs.com/dudu/p/5972649.html)

在ASP.NET中,使用负载均衡时,可以通过ServerVariables获取客户端的IP地址。

var IP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
IP=Request.ServerVaiables["REMOTE_ADDR"];
IP=Request.UserHostAddress;

但在ASP.NET Core中没有ServerVariables的对应实现,需要换一种方式,可以在HttpContext.Request.Headers中获取,需要注意的是key与ServerVariables方式不一样,ServerVariables中是"HTTP_X_FORWARDED_FOR",HttpContext.Request.Headers中是"X-Forwarded-For",示例代码如下:

var ip = context.Request.Headers["X-Forwarded-For"].FirstOrDefault();

完整的扩展方法实现如下:

复制代码
public static class HttpContextExtension
{
    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 ip;
    }
}
复制代码
原文地址:https://www.cnblogs.com/skyheaving/p/12582543.html