diff --git a/Iceshrimp.Backend/Core/Middleware/BlazorSsrHandoffMiddleware.cs b/Iceshrimp.Backend/Core/Middleware/BlazorSsrHandoffMiddleware.cs index ade772ca..fd53bf66 100644 --- a/Iceshrimp.Backend/Core/Middleware/BlazorSsrHandoffMiddleware.cs +++ b/Iceshrimp.Backend/Core/Middleware/BlazorSsrHandoffMiddleware.cs @@ -1,30 +1,33 @@ +using System.Collections.Concurrent; using System.Reflection; using Iceshrimp.Backend.Core.Extensions; using Microsoft.AspNetCore.Components.Endpoints; namespace Iceshrimp.Backend.Core.Middleware; -public class BlazorSsrHandoffMiddleware(RequestDelegate next) : ConditionalMiddleware +public class BlazorSsrHandoffMiddleware(RequestDelegate next) : IConditionalMiddleware { + private static readonly ConcurrentDictionary Cache = []; + public async Task InvokeAsync(HttpContext context) { - var attribute = context.GetEndpoint() - ?.Metadata.GetMetadata() - ?.Type.GetCustomAttributes() - .FirstOrDefault(); - - if (attribute != null) + context.Response.OnStarting(() => { - context.Response.OnStarting(() => - { - context.Response.Headers.Remove("blazor-enhanced-nav"); - return Task.CompletedTask; - }); - } + context.Response.Headers.Remove("blazor-enhanced-nav"); + return Task.CompletedTask; + }); await next(context); } + public static bool Predicate(HttpContext ctx) + => ctx.GetEndpoint() is { } endpoint && + Cache.GetOrAdd(endpoint, e => e.Metadata.GetMetadata() + ?.Type + .GetCustomAttributes() + .Any() ?? + false); + public static void DisableBlazorJsInitializers(RazorComponentsServiceOptions options) { var property =