/// <summary> /// 獲取客戶Ip /// </summary> /// <param name="context"></param> /// <returns></returns> public static string GetClientUserIp(this HttpContext context) { var userHostAddress = context.Request.Headers["X-Forwarded-For"].FirstOrDefault(); if (string.IsNullOrEmpty(userHostAddress)) { userHostAddress = context.Connection.RemoteIpAddress.ToString(); } //最后判斷獲取是否成功,並檢查IP地址的格式(檢查其格式非常重要) if (!string.IsNullOrEmpty(userHostAddress) && IsIP(userHostAddress)) { return userHostAddress; } return "127.0.0.1"; } /// <summary> /// 檢查IP地址格式 /// </summary> /// <param name="ip"></param> /// <returns></returns> public static bool IsIP(string ip) { return System.Text.RegularExpressions.Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$"); }
在startup.cs中Configure方法,添加如下:
#region 解決Ubuntu Nginx 代理不能獲取IP問題 app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); #endregion
調用方法:
[HttpPost("publish")] public WebApiResult TaskPublish(UserInfo request) { string ip =GetClientUserIp(HttpContext.Request.HttpContext);