Exemplo n.º 1
0
 public Task HandleAsync(HttpRequestResponseLog log)
 => Task.Run(() =>
 {
     Console.WriteLine("Request Recieved!");
     Console.WriteLine($"{nameof(log.RequestTime)}[{log.RequestTime}]");
     Console.WriteLine($"RequestTime.LocalDateTime[{log.RequestTime.LocalDateTime}]");
     Console.WriteLine($"{nameof(log.Scheme)}[{log.Scheme}]");
     Console.WriteLine($"{nameof(log.Host)}[{log.Host}]");
     Console.WriteLine($"{nameof(log.Path)}[{log.Path}]");
     Console.WriteLine($"{nameof(log.QueryString)}[{log.QueryString}]");
     Console.WriteLine($"{nameof(log.ResponseTime)}[{log.ResponseTime}]");
     Console.WriteLine($"ResponseTime.LocalDateTime[{log.ResponseTime.LocalDateTime}]");
 });
Exemplo n.º 2
0
        private async Task OnComplete(HttpRequestResponseLog httpRequestLog, HttpContext context)
        {
            var iAsyncRequestResponseLogHandle = (IAsyncRequestResponseLogHandle)context.RequestServices.GetService(typeof(IAsyncRequestResponseLogHandle));
            var iRequestResponseLogHandle      = (IRequestResponseLogHandle)context.RequestServices.GetService(typeof(IRequestResponseLogHandle));

            if (iAsyncRequestResponseLogHandle != null)
            {
                await iAsyncRequestResponseLogHandle.HandleAsync(httpRequestLog);
            }
            else if (iRequestResponseLogHandle != null)
            {
                iRequestResponseLogHandle.Handle(httpRequestLog);
            }
        }
Exemplo n.º 3
0
        public async Task Invoke(HttpContext context)
        {
            var request = context.Request;

            var httpRequestLog = new HttpRequestResponseLog
            {
                RequestTime        = DateTimeOffset.UtcNow,
                HasFormContentType = request.HasFormContentType,
                Form                 = request.HasFormContentType ? request.Form : null,
                Host                 = request.Host,
                IsHttps              = request.IsHttps,
                Method               = request.Method,
                Path                 = request.Path,
                PathBase             = request.PathBase,
                Protocol             = request.Protocol,
                Query                = request.Query,
                QueryString          = request.QueryString,
                RequestContentLength = request.ContentLength,
                RequestContentType   = request.ContentType,
                RequestCookies       = request.Cookies,
                RequestHeaders       = GetHeaders(request.Headers),
                RouteValues          = request.RouteValues,
                Scheme               = request.Scheme,
                RequestBody          = await GetRequestBody(request),
            };

            var originalBodyStream = context.Response.Body;

            using var newResponseBody = _recyclableMemoryStreamManager.GetStream();

            context.Response.Body = newResponseBody;

            await _next(context);

            newResponseBody.Seek(0, SeekOrigin.Begin);
            await newResponseBody.CopyToAsync(originalBodyStream);

            newResponseBody.Seek(0, SeekOrigin.Begin);
            httpRequestLog.ResponseBody         = ReadStreamInChunks(newResponseBody);
            httpRequestLog.ResponseTime         = DateTimeOffset.UtcNow;
            httpRequestLog.ResponseHeaders      = GetHeaders(context.Response.Headers);
            httpRequestLog.RequestContentLength = context.Response.ContentLength;
            httpRequestLog.ResponseContentType  = context.Response.ContentType;
            httpRequestLog.ResponseCookies      = context.Response.Cookies;

            await OnComplete(httpRequestLog, context);
        }