Пример #1
0
        public async Task Request(string url, HttpContext context, Document document)
        {
            var data = GetTime(url);

            if (data != null)
            {
                AddDocument(url, data.Id, document);
                data.Count++;
                return;
            }
            Add(url, document);
            if (_next != null)
            {
                await _next.Request(url, context, document);
            }
        }
Пример #2
0
        public async Task InvokeAsync(HttpContext context)
        {
            Document document = new Document();

            document.Start = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
            string authHeader  = context.Request.Headers["Authorization"];
            string url         = context.Request.Path.Value.ParseUrl();
            Stream orginalBody = context.Response.Body;



            try
            {
                using (var memStream = new MemoryStream()){
                    context.Response.Body = memStream;

                    var timer = Stopwatch.StartNew();
                    await _next(context);

                    document.EllepsitTime = timer.ElapsedMilliseconds;
                    memStream.Position    = 0;
                    await memStream.CopyToAsync(orginalBody);

                    document.ResponseStutus = context.Response.StatusCode;

                    if (context.Response.StatusCode != 200)
                    {
                        GetRequest(context, document);
                        GetResponse(memStream, document);

                        Task.Run(async() =>
                        {
                            await _service.ErrorResponse(url, context, document);
                        });
                    }
                    else
                    {
                        Task.Run(async() => { await _service.Request(url, context, document); });
                    }
                    //old
                }
            }
            finally
            {
                context.Response.Body = orginalBody;
            }
        }