public async Task Write_calls_should_produce_correct_output(int inputLength, int maxWriteSize)
        {
            GenerateData(inputLength);

            var output1 = new MemoryStream();
            var output2 = new MemoryStream();
            var output3 = new MemoryStream();

            var wrapper1 = new ResponseStreamWrapper(output1, maxWriteSize);
            var wrapper2 = new ResponseStreamWrapper(output2, maxWriteSize);
            var wrapper3 = new ResponseStreamWrapper(output3, maxWriteSize);

            wrapper1.Write(merged, leadingGarbage.Length, payload.Length);

            await wrapper2.WriteAsync(merged, leadingGarbage.Length, payload.Length, CancellationToken.None);

            #if NETCOREAPP3_1
            await wrapper3.WriteAsync(new ReadOnlyMemory <byte>(merged, leadingGarbage.Length, payload.Length));
            #endif

            output1.ToArray().Should().Equal(payload);
            output2.ToArray().Should().Equal(payload);

            #if NETCOREAPP3_1
            output3.ToArray().Should().Equal(payload);
            #endif
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Inspects the responses for all requests for HTML documents
        /// and injects the JavaScript to configure JSNLog client side.
        ///
        /// Uses a wrapper stream to wrap the response and examine
        /// only text/html requests - other content is passed through
        /// as is.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        private async Task HandleHtmlInjection(HttpContext context)
        {
            var path = context.Request.Path.Value;

            // Use a custom StreamWrapper to rewrite output on Write/WriteAsync
            using (var filteredResponse = new ResponseStreamWrapper(context.Response.Body, context))
            {
#if !NETCORE2
                // Use new IHttpResponseBodyFeature for abstractions of pilelines/streams etc.
                // For 3.x this works reliably while direct Response.Body was causing random HTTP failures
                context.Features.Set <IHttpResponseBodyFeature>(new StreamResponseBodyFeature(filteredResponse));
#else
                context.Response.Body = filteredResponse;
#endif

                await _next(context);
            }
        }