From f4687c01a8e12a16432d00369c6a2f88c547ef24 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Thu, 15 Oct 2020 14:01:28 +0200 Subject: [PATCH] Middleware fix. --- .../Frontend/Middlewares/IndexExtensions.cs | 20 +++++++------ .../Frontend/Middlewares/IndexMiddleware.cs | 11 ++++++-- .../Frontend/Middlewares/WebpackMiddleware.cs | 28 ++----------------- backend/src/Squidex/Areas/Frontend/Startup.cs | 6 ++-- 4 files changed, 25 insertions(+), 40 deletions(-) diff --git a/backend/src/Squidex/Areas/Frontend/Middlewares/IndexExtensions.cs b/backend/src/Squidex/Areas/Frontend/Middlewares/IndexExtensions.cs index 60c709362..c4ae98280 100644 --- a/backend/src/Squidex/Areas/Frontend/Middlewares/IndexExtensions.cs +++ b/backend/src/Squidex/Areas/Frontend/Middlewares/IndexExtensions.cs @@ -9,6 +9,7 @@ using System; using System.Collections.Concurrent; using System.Globalization; using System.IO; +using System.Net; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -33,20 +34,23 @@ namespace Squidex.Areas.Frontend.Middlewares return context.Request.Path.Value.EndsWith(".html", StringComparison.OrdinalIgnoreCase); } - public static bool IsHtml(this HttpContext context) + public static bool IsNotModified(this HttpResponse response) { - return context.Response.ContentType?.ToLower().Contains("text/html") == true; + return response.StatusCode == (int)HttpStatusCode.NotModified; } - public static string AdjustHtml(this string html, HttpContext httpContext) + public static string AdjustBase(this string html, HttpContext httpContext) { - var result = html; - if (httpContext.Request.PathBase.HasValue) { - result = result.Replace("", $""); + html = html.Replace("", $""); } + return html; + } + + public static string AddOptions(this string html, HttpContext httpContext) + { var uiOptions = httpContext.RequestServices.GetService>()?.Value; if (uiOptions != null) @@ -72,10 +76,10 @@ namespace Squidex.Areas.Frontend.Middlewares var texts = GetText(CultureInfo.CurrentUICulture.Name); - result = result.Replace("", $"\n"); + html = html.Replace("", $"\n"); } - return result; + return html; } private static string GetText(string culture) diff --git a/backend/src/Squidex/Areas/Frontend/Middlewares/IndexMiddleware.cs b/backend/src/Squidex/Areas/Frontend/Middlewares/IndexMiddleware.cs index 4ba2db152..25c055be7 100644 --- a/backend/src/Squidex/Areas/Frontend/Middlewares/IndexMiddleware.cs +++ b/backend/src/Squidex/Areas/Frontend/Middlewares/IndexMiddleware.cs @@ -23,7 +23,7 @@ namespace Squidex.Areas.Frontend.Middlewares public async Task InvokeAsync(HttpContext context) { - if (context.IsHtmlPath() && context.Response.StatusCode != 304) + if (context.IsHtmlPath() && !context.Response.IsNotModified()) { var responseBuffer = new MemoryStream(); var responseBody = context.Response.Body; @@ -32,13 +32,18 @@ namespace Squidex.Areas.Frontend.Middlewares await next(context); - if (context.Response.StatusCode != 304) + if (!context.Response.IsNotModified()) { context.Response.Body = responseBody; var html = Encoding.UTF8.GetString(responseBuffer.ToArray()); - html = html.AdjustHtml(context); + html = html.AdjustBase(context); + + if (context.IsIndex()) + { + html = html.AddOptions(context); + } context.Response.ContentLength = Encoding.UTF8.GetByteCount(html); context.Response.Body = responseBody; diff --git a/backend/src/Squidex/Areas/Frontend/Middlewares/WebpackMiddleware.cs b/backend/src/Squidex/Areas/Frontend/Middlewares/WebpackMiddleware.cs index 7d2ac538c..694167c1f 100644 --- a/backend/src/Squidex/Areas/Frontend/Middlewares/WebpackMiddleware.cs +++ b/backend/src/Squidex/Areas/Frontend/Middlewares/WebpackMiddleware.cs @@ -6,6 +6,7 @@ // ========================================================================== using System.IO; +using System.Net; using System.Net.Http; using System.Text; using System.Threading.Tasks; @@ -26,7 +27,7 @@ namespace Squidex.Areas.Frontend.Middlewares public async Task InvokeAsync(HttpContext context) { - if (context.IsIndex() && context.Response.StatusCode != 304) + if (context.IsIndex() && !context.Response.IsNotModified()) { var handler = new HttpClientHandler { @@ -43,35 +44,12 @@ namespace Squidex.Areas.Frontend.Middlewares { var html = await result.Content.ReadAsStringAsync(); - html = html.AdjustHtml(context); + html = html.AdjustBase(context); await context.Response.WriteAsync(html); } } } - else if (context.IsHtmlPath() && context.Response.StatusCode != 304) - { - var responseBuffer = new MemoryStream(); - var responseBody = context.Response.Body; - - context.Response.Body = responseBuffer; - - await next(context); - - if (context.Response.StatusCode != 304) - { - context.Response.Body = responseBody; - - var html = Encoding.UTF8.GetString(responseBuffer.ToArray()); - - html = html.AdjustHtml(context); - - context.Response.ContentLength = Encoding.UTF8.GetByteCount(html); - context.Response.Body = responseBody; - - await context.Response.WriteAsync(html); - } - } else { await next(context); diff --git a/backend/src/Squidex/Areas/Frontend/Startup.cs b/backend/src/Squidex/Areas/Frontend/Startup.cs index 2d8edf0ac..6c3f5f74c 100644 --- a/backend/src/Squidex/Areas/Frontend/Startup.cs +++ b/backend/src/Squidex/Areas/Frontend/Startup.cs @@ -52,14 +52,12 @@ namespace Squidex.Areas.Frontend return next(); }); + app.UseMiddleware(); + if (environment.IsDevelopment()) { app.UseMiddleware(); } - else - { - app.UseMiddleware(); - } app.UseStaticFiles(new StaticFileOptions {