public async Task Invoke(HttpContext context, IElementStreamingRequestContextCollection streamContext)
        {
            var handlerContext = streamContext.GetRequestContext(context);

            if (handlerContext == null)
            {
                await next(context);
            }
            else
            {
                var bodyStream = context.Response.Body;
                using (var incomingStream = new MemoryStream())
                {
                    var jsonStreamer = handlerContext.Streamer;
                    jsonStreamer.OutStream    = incomingStream;
                    jsonStreamer.SourceStream = context.Request.Body;
                    try
                    {
                        do
                        {
                            await jsonStreamer.Next();

                            switch (jsonStreamer.Status)
                            {
                            case Enums.StreamerStatus.StartOfData:
                                handlerContext?.ElementFoundHandler();
                                break;

                            case Enums.StreamerStatus.EndOfData:
                                handlerContext.ElementCompleteHandler();
                                break;
                            }
                        }while (jsonStreamer.Status != Enums.StreamerStatus.Complete);
                    }
                    finally
                    {
                        context.Request.Body.Dispose();
                        incomingStream.Position = 0;
                        // logging:
                        var logbuffer = new byte[incomingStream.Length];
                        incomingStream.Read(logbuffer, 0, (int)incomingStream.Length);
                        Console.WriteLine($"Request to {context.Request.Path}");
                        Console.WriteLine(Encoding.Default.GetString(logbuffer));
                        incomingStream.Position = 0;
                        context.Request.Body    = incomingStream;
                    }
                    await next(context);
                }
            }
        }
示例#2
0
 public DocumentController(IElementStreamingRequestContextCollection requestContexts, IHttpContextAccessor httpContext)
 {
     requestContext   = requestContexts.ActiveContext();
     this.httpContext = httpContext.HttpContext;
 }