using Common; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using NLog; using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.Threading.Tasks; namespace ZR.Admin.WebApi.Middleware { public class RequestIPMiddleware { private readonly RequestDelegate _next; static readonly Logger Logger = LogManager.GetCurrentClassLogger();//声明NLog变量 public RequestIPMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { var url = context.Request.Path.ToString().ToLower(); string userip = Tools.GetRealIP(); //string agent = HttpContextExtension.GetUserAgent(context); string[] urls = new string[] { "/css", "/js", "/images", "/lib", "/home/error", "/api" }; var strRegex = "(.jpg|.png|.gif|.php|.cfg|.ico)$"; //用于验证图片扩展名的正则表达式 var re = new Regex(strRegex); //阻止.php访问往下请求 if (new Regex("(.php)$").IsMatch(url)) { await context.Response.WriteAsync("hello"); return; } //var ip_info = IpTool.Search(userip); ////bool flag = ((IList)urls).Contains(url); //if (!re.IsMatch(url) ) //{ Logger.Debug($"IP中间件请求访问,IP[{userip}]"); //} //两种方式传递下去 一是invoke 一个直接next //await _next.Invoke(context); await _next(context); } } public static class RequestIPMiddlewareExtensions { /// /// 用于引用请求IP中间件 /// /// 扩展类型 /// IApplicationBuilder public static IApplicationBuilder UseRequestIPMiddleware(this IApplicationBuilder builder) { return builder.UseMiddleware(); } } }