Skip to content

Commit f46b5da

Browse files
authored
Flip switch for controlling navigation flow on SSR (#62358)
* Flip. * Update templates.
1 parent bb61d99 commit f46b5da

File tree

7 files changed

+13
-11
lines changed

7 files changed

+13
-11
lines changed

src/Components/Endpoints/src/DependencyInjection/HttpNavigationManager.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ namespace Microsoft.AspNetCore.Components.Endpoints;
88

99
internal sealed class HttpNavigationManager : NavigationManager, IHostEnvironmentNavigationManager
1010
{
11-
private const string _enableThrowNavigationException = "Microsoft.AspNetCore.Components.Endpoints.NavigationManager.EnableThrowNavigationException";
11+
private const string _disableThrowNavigationException = "Microsoft.AspNetCore.Components.Endpoints.NavigationManager.DisableThrowNavigationException";
1212

13-
[FeatureSwitchDefinition(_enableThrowNavigationException)]
13+
[FeatureSwitchDefinition(_disableThrowNavigationException)]
1414
private static bool _throwNavigationException =>
15-
AppContext.TryGetSwitch(_enableThrowNavigationException, out var switchValue) && switchValue;
15+
!AppContext.TryGetSwitch(_disableThrowNavigationException, out var switchValue) || !switchValue;
1616

1717
private Func<string, Task>? _onNavigateTo;
1818

src/Components/Endpoints/test/EndpointHtmlRendererTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -849,9 +849,9 @@ public async Task Rendering_ComponentWithJsInteropThrows()
849849
[Theory]
850850
[InlineData(true)]
851851
[InlineData(false)]
852-
public async Task UriHelperRedirect_ThrowsInvalidOperationException_WhenResponseHasAlreadyStarted(bool expectException)
852+
public async Task UriHelperRedirect_ThrowsInvalidOperationException_WhenResponseHasAlreadyStarted(bool allowException)
853853
{
854-
AppContext.SetSwitch("Microsoft.AspNetCore.Components.Endpoints.NavigationManager.EnableThrowNavigationException", isEnabled: expectException);
854+
AppContext.SetSwitch("Microsoft.AspNetCore.Components.Endpoints.NavigationManager.DisableThrowNavigationException", isEnabled: !allowException);
855855
// Arrange
856856
var ctx = new DefaultHttpContext();
857857
ctx.Request.Scheme = "http";
@@ -867,7 +867,7 @@ public async Task UriHelperRedirect_ThrowsInvalidOperationException_WhenResponse
867867
string redirectUri = "http://localhost/redirect";
868868

869869
// Act
870-
if (expectException)
870+
if (allowException)
871871
{
872872
var exception = await Assert.ThrowsAsync<InvalidOperationException>(async () => await renderer.PrerenderComponentAsync(
873873
httpContext,

src/Components/Server/src/Circuits/RemoteNavigationManager.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ internal sealed partial class RemoteNavigationManager : NavigationManager, IHost
1717
private readonly ILogger<RemoteNavigationManager> _logger;
1818
private IJSRuntime _jsRuntime;
1919
private bool? _navigationLockStateBeforeJsRuntimeAttached;
20-
private const string _enableThrowNavigationException = "Microsoft.AspNetCore.Components.Endpoints.NavigationManager.EnableThrowNavigationException";
20+
private const string _disableThrowNavigationException = "Microsoft.AspNetCore.Components.Endpoints.NavigationManager.DisableThrowNavigationException";
2121

22-
[FeatureSwitchDefinition(_enableThrowNavigationException)]
22+
[FeatureSwitchDefinition(_disableThrowNavigationException)]
2323
private static bool _throwNavigationException =>
24-
AppContext.TryGetSwitch(_enableThrowNavigationException, out var switchValue) && switchValue;
24+
!AppContext.TryGetSwitch(_disableThrowNavigationException, out var switchValue) || !switchValue;
2525
private Func<string, Task>? _onNavigateTo;
2626

2727
public event EventHandler<Exception>? UnhandledException;

src/Components/test/E2ETest/ServerRenderingTests/InteractivityTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1405,7 +1405,7 @@ public void CanPersistMultiplePrerenderedStateDeclaratively_Auto_PersistsOnWebAs
14051405
[InlineData(false)]
14061406
public void NavigatesWithInteractivityByRequestRedirection(bool controlFlowByException)
14071407
{
1408-
AppContext.SetSwitch("Microsoft.AspNetCore.Components.Endpoints.NavigationManager.EnableThrowNavigationException", isEnabled: controlFlowByException);
1408+
AppContext.SetSwitch("Microsoft.AspNetCore.Components.Endpoints.NavigationManager.DisableThrowNavigationException", isEnabled: !controlFlowByException);
14091409
Navigate($"{ServerPathBase}/routing/ssr-navigate-to");
14101410
Browser.Equal("Click submit to navigate to home", () => Browser.Exists(By.Id("test-info")).Text);
14111411
Browser.Click(By.Id("redirectButton"));

src/Components/test/E2ETest/ServerRenderingTests/NoInteractivityTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public void CanUseServerAuthenticationStateByDefault()
7272
[InlineData(false, true)]
7373
public void NavigatesWithoutInteractivityByRequestRedirection(bool controlFlowByException, bool isStreaming)
7474
{
75-
AppContext.SetSwitch("Microsoft.AspNetCore.Components.Endpoints.NavigationManager.EnableThrowNavigationException", isEnabled: controlFlowByException);
75+
AppContext.SetSwitch("Microsoft.AspNetCore.Components.Endpoints.NavigationManager.DisableThrowNavigationException", isEnabled: !controlFlowByException);
7676
string streaming = isStreaming ? $"streaming-" : "";
7777
Navigate($"{ServerPathBase}/routing/ssr-{streaming}navigate-to");
7878
Browser.Equal("Click submit to navigate to home", () => Browser.Exists(By.Id("test-info")).Text);

src/ProjectTemplates/Web.ProjectTemplates/BlazorWeb-CSharp.Client.csproj.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
99
<RootNamespace Condition="'$(name)' != '$(name{-VALUE-FORMS-}safe_namespace)'">BlazorWeb-CSharp.Client</RootNamespace>
1010
<AssemblyName Condition="'$(name)' != '$(name{-VALUE-FORMS-}safe_namespace)'">`$(AssemblyName.Replace(' ', '_'))</AssemblyName>
11+
<BlazorDisableThrowNavigationException>true</BlazorDisableThrowNavigationException>
1112
</PropertyGroup>
1213

1314
<ItemGroup>

src/ProjectTemplates/Web.ProjectTemplates/BlazorWeb-CSharp.csproj.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<NoDefaultLaunchSettingsFile Condition="'$(ExcludeLaunchSettings)' == 'True'">True</NoDefaultLaunchSettingsFile>
99
<RootNamespace Condition="'$(name)' != '$(name{-VALUE-FORMS-}safe_namespace)'">BlazorWeb-CSharp</RootNamespace>
1010
<AssemblyName Condition="'$(name)' != '$(name{-VALUE-FORMS-}safe_namespace)'">`$(AssemblyName.Replace(' ', '_'))</AssemblyName>
11+
<BlazorDisableThrowNavigationException>true</BlazorDisableThrowNavigationException>
1112
</PropertyGroup>
1213

1314
<!--#if (IndividualLocalAuth && !UseLocalDB) -->

0 commit comments

Comments
 (0)