Пример #1
0
        public async Task ExecuteResultAsync(ActionContext context)
        {
            var wrappedStream = context.HttpContext.Response.Body;

            using (var stream = new MemoryStream())
                using (var streamReader = new StreamReader(stream, Encoding.UTF8))
                {
                    context.HttpContext.Response.Body = stream;
                    string html = null;

                    try
                    {
                        await _wrappedActionResult.ExecuteResultAsync(context);

                        stream.Seek(0, SeekOrigin.Begin);
                        {
                            html = (await streamReader.ReadToEndAsync()).Trim();
                        }
                    }
                    finally
                    {
                        context.HttpContext.Response.Body = wrappedStream;
                    }

                    // Check for not XML
                    if (IsHtmlContent(context, html))
                    {
                        var headScript = _visualEditorScriptGenerator.CreateHeadScript();
                        var bodyScript = await _visualEditorScriptGenerator.CreateBodyScriptAsync(context);

                        html = _htmlDocumentScriptInjector.InjectScripts(html, headScript, bodyScript);
                    }

                    var outputStream = new StreamWriter(wrappedStream, Encoding.UTF8, 1024, true);
                    try
                    {
                        await outputStream.WriteAsync(html);

                        await outputStream.FlushAsync();
                    }
                    finally
                    {
                        // The "using" pattern would cause a sync flush which throws an error in NET Core 3.1
                        await outputStream.DisposeAsync();
                    }
                }
        }
Пример #2
0
        public async Task ExecuteResultAsync(ActionContext context)
        {
            var wrappedStream = context.HttpContext.Response.Body;

            using (var stream = new MemoryStream())
            {
                context.HttpContext.Response.Body = stream;
                string html = null;

                try
                {
                    await _wrappedActionResult.ExecuteResultAsync(context);

                    stream.Seek(0, SeekOrigin.Begin);
                    html = Encoding.UTF8.GetString(stream.ToArray()).Trim();
                }
                finally
                {
                    context.HttpContext.Response.Body = wrappedStream;
                }

                // Check for not XML
                if (IsHtmlContent(context, html))
                {
                    var headScript = _visualEditorScriptGenerator.CreateHeadScript();
                    var bodyScript = await _visualEditorScriptGenerator.CreateBodyScriptAsync(context);

                    html = _htmlDocumentScriptInjector.InjectScripts(html, headScript, bodyScript);
                }

                using (var outputStream = new StreamWriter(wrappedStream, Encoding.UTF8))
                {
                    await outputStream.WriteAsync(html);

                    await outputStream.FlushAsync();
                }
            }
        }