Exemple #1
0
 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);
            }
        }