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.Collections.Concurrent;
using System.Globalization; using System.Globalization;
using System.IO; using System.IO;
using System.Net;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
@ -33,20 +34,23 @@ namespace Squidex.Areas.Frontend.Middlewares
return context.Request.Path.Value.EndsWith(".html", StringComparison.OrdinalIgnoreCase); 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) 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; var uiOptions = httpContext.RequestServices.GetService<IOptions<MyUIOptions>>()?.Value;
if (uiOptions != null) if (uiOptions != null)
@ -72,10 +76,10 @@ namespace Squidex.Areas.Frontend.Middlewares
var texts = GetText(CultureInfo.CurrentUICulture.Name); 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) 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) public async Task InvokeAsync(HttpContext context)
{ {
if (context.IsHtmlPath() && context.Response.StatusCode != 304) if (context.IsHtmlPath() && !context.Response.IsNotModified())
{ {
var responseBuffer = new MemoryStream(); var responseBuffer = new MemoryStream();
var responseBody = context.Response.Body; var responseBody = context.Response.Body;
@ -32,13 +32,18 @@ namespace Squidex.Areas.Frontend.Middlewares
await next(context); await next(context);
if (context.Response.StatusCode != 304) if (!context.Response.IsNotModified())
{ {
context.Response.Body = responseBody; context.Response.Body = responseBody;
var html = Encoding.UTF8.GetString(responseBuffer.ToArray()); 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.ContentLength = Encoding.UTF8.GetByteCount(html);
context.Response.Body = responseBody; context.Response.Body = responseBody;

28
backend/src/Squidex/Areas/Frontend/Middlewares/WebpackMiddleware.cs

@ -6,6 +6,7 @@
// ========================================================================== // ==========================================================================
using System.IO; using System.IO;
using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -26,7 +27,7 @@ namespace Squidex.Areas.Frontend.Middlewares
public async Task InvokeAsync(HttpContext context) public async Task InvokeAsync(HttpContext context)
{ {
if (context.IsIndex() && context.Response.StatusCode != 304) if (context.IsIndex() && !context.Response.IsNotModified())
{ {
var handler = new HttpClientHandler var handler = new HttpClientHandler
{ {
@ -43,35 +44,12 @@ namespace Squidex.Areas.Frontend.Middlewares
{ {
var html = await result.Content.ReadAsStringAsync(); var html = await result.Content.ReadAsStringAsync();
html = html.AdjustHtml(context); html = html.AdjustBase(context);
await context.Response.WriteAsync(html); 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 else
{ {
await next(context); await next(context);

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

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

Loading…
Cancel
Save