创建一个用于记录用户访问的中间件
代码如下:
public class AdfMonitorMiddleWare { private readonly RequestDelegate _next; public AdfMonitorMiddleWare(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { Stopwatch sw = new Stopwatch(); //获取远程访问IP var remoteIp = context.Connection.RemoteIpAddress; context.Items["Adf-Ip"] = remoteIp; context.Items["Adf-MyData"] = "自定义数据"; //得到Base64的参数 Dictionary<string, object> dicQueryParam = new Dictionary<string, object>(); Dictionary<string, object> dicFormParam = new Dictionary<string, object>(); string queryParams = ""; foreach (KeyValuePair<string, StringValues> keyValuePair in context.Request.Query) { queryParams += "{keyValuePair.Key},{keyValuePair.Value}"; //if(dicRequestParam.ContainsKey(keyValuePair.Key)) dicQueryParam[keyValuePair.Key] = keyValuePair.Value; } context.Items["Adf-QueryParamList"] = dicQueryParam; if (!string.IsNullOrEmpty(queryParams)) { Console.WriteLine("当前请求的query参数是:" + queryParams); } if (context.Request.HasFormContentType) { string formParams = ""; foreach (KeyValuePair<string, StringValues> keyValuePair in context.Request.Form) { formParams += "{keyValuePair.Key},{keyValuePair.Value}"; dicFormParam[keyValuePair.Key] = keyValuePair.Value; } context.Items["Adf-FormParamList"] = dicFormParam; if (!string.IsNullOrEmpty(formParams)) { Console.WriteLine("当前请求的form参数是:" + formParams); } } //用于记录用户的访问的时间 //同时将用户访问ip地址 context.Response.OnStarting(x => { sw.Stop(); string timeInfo = "{sw.ElapsedMilliseconds}ms"; context.Response.Headers["Adf-ExecuteTime"] = timeInfo; return Task.CompletedTask; },context); //Console.WriteLine("当前访问的ip地址是:{remoteIp}"); //直接输出 401 //context.Response.StatusCode = 401; //return //跳转下一个中间件 await _next.Invoke(context); } }
功能说明
1、记录所有用户的访问ip地址
2、记录当前用户访问当前页面的时间
3、其他功能根据实际情况可以扩展
中间件注册
app.UseMiddleware<AdfMonitorMiddleWare>();