public async Task <MessageModel> Add(ApiRequestLog model) { model.Id = 0; return(new MessageModel(await _ApiRequestLogServices.Add(model) > 0)); }
public async Task InvokeAsync(HttpContext context) { if (Appsettings.app("Middleware", "RequestResponseLog", "Enabled").ToBool()) { // 过滤,只有接口 if (context.Request.Path.Value.Contains("api") && !context.Request.QueryString.ToString().Contains("Page")) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); context.Request.EnableBuffering(); Stream originalBody = context.Response.Body; string Path = context.Request.Path + context.Request.QueryString; string DataRequest = string.Empty; string DataResponse = string.Empty; try { DataRequest = await RequestData(context); using (var ms = new MemoryStream()) { context.Response.Body = ms; await _next(context); DataResponse = ResponseData(context.Response, ms); ms.Position = 0; await ms.CopyToAsync(originalBody); } } catch (Exception) { } finally { context.Response.Body = originalBody; } stopwatch.Stop(); Parallel.For(0, 1, s => { ApiRequestLog requestLog = new ApiRequestLog() { userName = user.Name, consumingTime = stopwatch.ElapsedMilliseconds, method = context.Request.Method.ToLower(), FormDataparameter = DataRequest, path = context.Request.Path, Urlparameter = context.Request.QueryString.ToString(), ResponseData = DataResponse, state = context.Response.StatusCode == StatusCodes.Status200OK ? Requeststate.succeed : Requeststate.error, requestTime = DateTime.Now }; requestLogServices.Add(requestLog); }); } else { await _next(context); } } else { await _next(context); } }