소스 검색

修正bug

懒得勤快 5 년 전
부모
커밋
ba6dac1101

+ 12 - 8
src/Masuit.MyBlogs.Core/Common/CommonHelper.cs

@@ -13,6 +13,7 @@ using System.Linq;
 using System.Net;
 using System.Text;
 using System.Threading;
+using Microsoft.EntityFrameworkCore.Internal;
 #if !DEBUG
 using Masuit.MyBlogs.Core.Models.ViewModel;
 using Masuit.Tools.Models;
@@ -150,26 +151,29 @@ namespace Masuit.MyBlogs.Core.Common
         /// <summary>
         /// 是否是禁区
         /// </summary>
-        /// <param name="ip"></param>
+        /// <param name="ips"></param>
         /// <returns></returns>
-        public static bool IsInDenyArea(this string ip)
+        public static bool IsInDenyArea(this string ips)
         {
             if (SystemSettings.GetOrAdd("EnableDenyArea", "false") == "true")
             {
-                var pos = GetIPLocation(ip);
-                var denyAreas = SystemSettings.GetOrAdd("DenyArea", "").Split(',', ',');
-                return pos.Contains(denyAreas) || denyAreas.Intersect(pos.Split("|")).Any();
+                foreach (var item in ips.Split(','))
+                {
+                    var pos = GetIPLocation(item);
+                    var denyAreas = SystemSettings.GetOrAdd("DenyArea", "").Split(',', ',');
+                    return pos.Contains(denyAreas) || denyAreas.Intersect(pos.Split("|")).Any();
+                }
             }
 
             return false;
         }
 
+        private static readonly DbSearcher Searcher = new DbSearcher(Path.Combine(AppContext.BaseDirectory + "App_Data", "ip2region.db"));
         public static string GetIPLocation(this IPAddress ip) => GetIPLocation(ip.MapToIPv4().ToString());
 
-        private static readonly DbSearcher Searcher = new DbSearcher(Path.Combine(AppContext.BaseDirectory + "App_Data", "ip2region.db"));
-        public static string GetIPLocation(this string ip)
+        public static string GetIPLocation(this string ips)
         {
-            return Searcher.MemorySearch(ip).Region;
+            return ips.Split(',').Select(s => Searcher.MemorySearch(s).Region).Join(" , ");
         }
 
         /// <summary>

+ 5 - 4
src/Masuit.MyBlogs.Core/Extensions/MyExceptionFilter.cs

@@ -15,21 +15,22 @@ namespace Masuit.MyBlogs.Core.Extensions
             base.OnException(context);
             string err;
             var req = context.HttpContext.Request;
+            var ip = string.IsNullOrEmpty(req.Headers["X-Forwarded-For"]) ? context.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString() : req.Headers["X-Forwarded-For"].ToString();
             switch (context.Exception)
             {
                 case DbUpdateConcurrencyException ex:
-                    err = $"异常源:{ex.Source},异常类型:{ex.GetType().Name},\n请求路径:{req.Scheme}://{req.Host}{HttpUtility.UrlDecode(req.Path)},客户端用户代理:{req.Headers["User-Agent"]},客户端IP:{context.HttpContext.Connection.RemoteIpAddress}\t{ex.InnerException?.Message}\t";
+                    err = $"异常源:{ex.Source},异常类型:{ex.GetType().Name},\n请求路径:{req.Scheme}://{req.Host}{HttpUtility.UrlDecode(req.Path)},客户端用户代理:{req.Headers["User-Agent"]},客户端IP:{ip}\t{ex.InnerException?.Message}\t";
                     LogManager.Error(err, ex);
                     break;
                 case DbUpdateException ex:
-                    err = $"异常源:{ex.Source},异常类型:{ex.GetType().Name},\n请求路径:{req.Scheme}://{req.Host}{HttpUtility.UrlDecode(req.Path)},客户端用户代理:{req.Headers["User-Agent"]},客户端IP:{context.HttpContext.Connection.RemoteIpAddress}\t{ex?.InnerException?.Message}\t";
+                    err = $"异常源:{ex.Source},异常类型:{ex.GetType().Name},\n请求路径:{req.Scheme}://{req.Host}{HttpUtility.UrlDecode(req.Path)},客户端用户代理:{req.Headers["User-Agent"]},客户端IP:{ip}\t{ex?.InnerException?.Message}\t";
                     LogManager.Error(err, ex);
                     break;
                 case AggregateException ex:
                     LogManager.Debug("↓↓↓" + ex.Message + "↓↓↓");
                     ex.Handle(e =>
                     {
-                        LogManager.Error($"异常源:{e.Source},异常类型:{e.GetType().Name},\n请求路径:{req.Scheme}://{req.Host}{HttpUtility.UrlDecode(req.Path)},客户端用户代理:{req.Headers["User-Agent"]},客户端IP:{context.HttpContext.Connection.RemoteIpAddress}\t", e);
+                        LogManager.Error($"异常源:{e.Source},异常类型:{e.GetType().Name},\n请求路径:{req.Scheme}://{req.Host}{HttpUtility.UrlDecode(req.Path)},客户端用户代理:{req.Headers["User-Agent"]},客户端IP:{ip}\t", e);
                         return true;
                     });
                     break;
@@ -38,7 +39,7 @@ namespace Masuit.MyBlogs.Core.Extensions
                     context.ExceptionHandled = true;
                     return;
                 default:
-                    LogManager.Error($"异常源:{context.Exception.Source},异常类型:{context.Exception.GetType().Name},\n请求路径:{req.Scheme}://{req.Host}{HttpUtility.UrlDecode(req.Path)},客户端用户代理:{req.Headers["User-Agent"]},客户端IP:{context.HttpContext.Connection.RemoteIpAddress}\t", context.Exception);
+                    LogManager.Error($"异常源:{context.Exception.Source},异常类型:{context.Exception.GetType().Name},\n请求路径:{req.Scheme}://{req.Host}{HttpUtility.UrlDecode(req.Path)},客户端用户代理:{req.Headers["User-Agent"]},客户端IP:{ip}\t", context.Exception);
                     break;
             }
 #if !DEBUG

+ 1 - 1
src/Masuit.MyBlogs.Core/Masuit.MyBlogs.Core.xml

@@ -70,7 +70,7 @@
             <summary>
             是否是禁区
             </summary>
-            <param name="ip"></param>
+            <param name="ips"></param>
             <returns></returns>
         </member>
         <member name="M:Masuit.MyBlogs.Core.Common.CommonHelper.Mapper``1(System.Object)">