Browse Source

Middleware fix.

pull/592/head
Sebastian 5 years ago
parent
commit
f4687c01a8
  1. 20
      backend/src/Squidex/Areas/Frontend/Middlewares/IndexExtensions.cs
  2. 11
      backend/src/Squidex/Areas/Frontend/Middlewares/IndexMiddleware.cs
  3. 28
      backend/src/Squidex/Areas/Frontend/Middlewares/WebpackMiddleware.cs
  4. 6
      backend/src/Squidex/Areas/Frontend/Startup.cs

20
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("<base href=\"/\">", $"<base href=\"{httpContext.Request.PathBase}/\">");
html = html.Replace("<base href=\"/\">", $"<base href=\"{httpContext.Request.PathBase}/\">");
}
return html;
}
public static string AddOptions(this string html, HttpContext httpContext)
{
var uiOptions = httpContext.RequestServices.GetService<IOptions<MyUIOptions>>()?.Value;
if (uiOptions != null)
@ -72,10 +76,10 @@ namespace Squidex.Areas.Frontend.Middlewares
var texts = GetText(CultureInfo.CurrentUICulture.Name);
result = result.Replace("<body>", $"<body>\n<script>\nvar options = {jsonOptions};\nvar texts = {texts};</script>");
html = html.Replace("<body>", $"<body>\n<script>\nvar options = {jsonOptions};\nvar texts = {texts};</script>");
}
return result;
return html;
}
private static string GetText(string culture)

11
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;

28
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);

6
backend/src/Squidex/Areas/Frontend/Startup.cs

@ -52,14 +52,12 @@ namespace Squidex.Areas.Frontend
return next();
});
app.UseMiddleware<IndexMiddleware>();
if (environment.IsDevelopment())
{
app.UseMiddleware<WebpackMiddleware>();
}
else
{
app.UseMiddleware<IndexMiddleware>();
}
app.UseStaticFiles(new StaticFileOptions
{

Loading…
Cancel
Save