From 738eccb99db740fd519dea270fb73c92135ed40a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 25 Sep 2025 11:00:18 +0000 Subject: [PATCH] Enable hot reloading for Blazor inside an iframe Co-authored-by: javiercn <6995051+javiercn@users.noreply.github.com> --- .../BrowserRefreshMiddleware.cs | 2 ++ .../BrowserRefreshMiddlewareTest.cs | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/BuiltInTools/BrowserRefresh/BrowserRefreshMiddleware.cs b/src/BuiltInTools/BrowserRefresh/BrowserRefreshMiddleware.cs index 853b52a83778..16d262a0d1ad 100644 --- a/src/BuiltInTools/BrowserRefresh/BrowserRefreshMiddleware.cs +++ b/src/BuiltInTools/BrowserRefresh/BrowserRefreshMiddleware.cs @@ -170,6 +170,8 @@ internal static bool IsBrowserDocumentRequest(HttpContext context) if (request.Headers.TryGetValue("Sec-Fetch-Dest", out var values) && !StringValues.IsNullOrEmpty(values) && !string.Equals(values[0], "document", StringComparison.OrdinalIgnoreCase) && + !string.Equals(values[0], "frame", StringComparison.OrdinalIgnoreCase) && + !string.Equals(values[0], "iframe", StringComparison.OrdinalIgnoreCase) && !IsProgressivelyEnhancedNavigation(context.Request)) { // See https://github.com/dotnet/aspnetcore/issues/37326. diff --git a/test/Microsoft.AspNetCore.Watch.BrowserRefresh.Tests/BrowserRefreshMiddlewareTest.cs b/test/Microsoft.AspNetCore.Watch.BrowserRefresh.Tests/BrowserRefreshMiddlewareTest.cs index 1fa4b862b693..ba144b2c3296 100644 --- a/test/Microsoft.AspNetCore.Watch.BrowserRefresh.Tests/BrowserRefreshMiddlewareTest.cs +++ b/test/Microsoft.AspNetCore.Watch.BrowserRefresh.Tests/BrowserRefreshMiddlewareTest.cs @@ -182,6 +182,30 @@ public void IsBrowserDocumentRequest_ReturnsTrue_IfRequestFetchMetadataRequestHe [Theory] [InlineData("frame")] [InlineData("iframe")] + public void IsBrowserDocumentRequest_ReturnsTrue_IfRequestFetchMetadataRequestHeaderIsFrame(string headerValue) + { + // Arrange + var context = new DefaultHttpContext + { + Request = + { + Method = "Post", + Headers = + { + ["Accept"] = "text/html", + ["Sec-Fetch-Dest"] = headerValue, + }, + }, + }; + + // Act + var result = BrowserRefreshMiddleware.IsBrowserDocumentRequest(context); + + // Assert + Assert.True(result); + } + + [Theory] [InlineData("serviceworker")] public void IsBrowserDocumentRequest_ReturnsFalse_IfRequestFetchMetadataRequestHeaderIsNotDocument(string headerValue) {