From d8ba47b236cb2f200baa5e0fe92f29bc15df40a3 Mon Sep 17 00:00:00 2001 From: SP Date: Wed, 3 Jul 2024 11:05:23 +0200 Subject: [PATCH 1/5] Added NavigationException constructor with overload & NavigationRedirectHelper (temp location) --- .../Components/src/NavigationException.cs | 8 ++++++ .../src/NavigationRedirectHelper.cs | 28 +++++++++++++++++++ .../Components/src/PublicAPI.Unshipped.txt | 3 ++ 3 files changed, 39 insertions(+) create mode 100644 src/Components/Components/src/NavigationRedirectHelper.cs diff --git a/src/Components/Components/src/NavigationException.cs b/src/Components/Components/src/NavigationException.cs index c30bf3b59e1c..818ffbd3091d 100644 --- a/src/Components/Components/src/NavigationException.cs +++ b/src/Components/Components/src/NavigationException.cs @@ -16,6 +16,14 @@ public NavigationException(string uri) Location = uri; } + /// + /// Initializes a new instance with a custom message. + /// + public NavigationException(string uri, string message) : base(message) + { + Location = uri; + } + /// /// Gets the uri to which navigation was attempted. /// diff --git a/src/Components/Components/src/NavigationRedirectHelper.cs b/src/Components/Components/src/NavigationRedirectHelper.cs new file mode 100644 index 000000000000..9590f319dfb7 --- /dev/null +++ b/src/Components/Components/src/NavigationRedirectHelper.cs @@ -0,0 +1,28 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics.CodeAnalysis; + +namespace Microsoft.AspNetCore.Components; + +/// +/// Helper class to throw a . +/// +public static class NavigationRedirectHelper +{ + private const string RedirectExceptionMessage = + "A navigation was initiated during static rendering. " + + "This exception is not an error, but instead signals to the framework that a redirect should occur. " + + "It should not be caught by application code."; + + /// + /// Creates an absolute URI and throws a new . + /// + + [DoesNotReturn] + public static void ThrowNavigationExceptionForRedirect(NavigationManager navigationManager, string uri) + { + var absoluteUriString = navigationManager.ToAbsoluteUri(uri).AbsoluteUri; + throw new NavigationException(absoluteUriString, RedirectExceptionMessage); + } +} diff --git a/src/Components/Components/src/PublicAPI.Unshipped.txt b/src/Components/Components/src/PublicAPI.Unshipped.txt index e8c43eb034cf..8ba2641b865e 100644 --- a/src/Components/Components/src/PublicAPI.Unshipped.txt +++ b/src/Components/Components/src/PublicAPI.Unshipped.txt @@ -4,6 +4,8 @@ Microsoft.AspNetCore.Components.ComponentBase.AssignedRenderMode.get -> Microsof Microsoft.AspNetCore.Components.ComponentBase.RendererInfo.get -> Microsoft.AspNetCore.Components.RendererInfo! Microsoft.AspNetCore.Components.ExcludeFromInteractiveRoutingAttribute Microsoft.AspNetCore.Components.ExcludeFromInteractiveRoutingAttribute.ExcludeFromInteractiveRoutingAttribute() -> void +Microsoft.AspNetCore.Components.NavigationException.NavigationException(string! uri, string! message) -> void +Microsoft.AspNetCore.Components.NavigationRedirectHelper Microsoft.AspNetCore.Components.RendererInfo Microsoft.AspNetCore.Components.RendererInfo.IsInteractive.get -> bool Microsoft.AspNetCore.Components.RendererInfo.Name.get -> string! @@ -23,6 +25,7 @@ Microsoft.AspNetCore.Components.ResourceAssetProperty Microsoft.AspNetCore.Components.ResourceAssetProperty.Name.get -> string! Microsoft.AspNetCore.Components.ResourceAssetProperty.ResourceAssetProperty(string! name, string! value) -> void Microsoft.AspNetCore.Components.ResourceAssetProperty.Value.get -> string! +static Microsoft.AspNetCore.Components.NavigationRedirectHelper.ThrowNavigationExceptionForRedirect(Microsoft.AspNetCore.Components.NavigationManager! navigationManager, string! uri) -> void static readonly Microsoft.AspNetCore.Components.ResourceAssetCollection.Empty -> Microsoft.AspNetCore.Components.ResourceAssetCollection! virtual Microsoft.AspNetCore.Components.RenderTree.Renderer.Assets.get -> Microsoft.AspNetCore.Components.ResourceAssetCollection! virtual Microsoft.AspNetCore.Components.RenderTree.Renderer.RendererInfo.get -> Microsoft.AspNetCore.Components.RendererInfo! From d300f2370a7d43c508bd4a962bed3ee300eb0e34 Mon Sep 17 00:00:00 2001 From: SP Date: Fri, 5 Jul 2024 11:05:07 +0200 Subject: [PATCH 2/5] Updated NavigationException references to use NavigationRedirectHelper --- .../src/DependencyInjection/HttpNavigationManager.cs | 3 +-- .../Server/src/Circuits/RemoteNavigationManager.cs | 6 ++---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/Components/Endpoints/src/DependencyInjection/HttpNavigationManager.cs b/src/Components/Endpoints/src/DependencyInjection/HttpNavigationManager.cs index e9bb98f2d1c2..3adc72e883f8 100644 --- a/src/Components/Endpoints/src/DependencyInjection/HttpNavigationManager.cs +++ b/src/Components/Endpoints/src/DependencyInjection/HttpNavigationManager.cs @@ -11,7 +11,6 @@ internal sealed class HttpNavigationManager : NavigationManager, IHostEnvironmen protected override void NavigateToCore(string uri, NavigationOptions options) { - var absoluteUriString = ToAbsoluteUri(uri).AbsoluteUri; - throw new NavigationException(absoluteUriString); + NavigationRedirectHelper.ThrowNavigationExceptionForRedirect(this, uri); } } diff --git a/src/Components/Server/src/Circuits/RemoteNavigationManager.cs b/src/Components/Server/src/Circuits/RemoteNavigationManager.cs index a2a148945ee1..3bd57d7f3117 100644 --- a/src/Components/Server/src/Circuits/RemoteNavigationManager.cs +++ b/src/Components/Server/src/Circuits/RemoteNavigationManager.cs @@ -87,8 +87,7 @@ protected override void NavigateToCore(string uri, NavigationOptions options) if (_jsRuntime == null) { - var absoluteUriString = ToAbsoluteUri(uri).AbsoluteUri; - throw new NavigationException(absoluteUriString); + NavigationRedirectHelper.ThrowNavigationExceptionForRedirect(this, uri); } _ = PerformNavigationAsync(); @@ -128,8 +127,7 @@ public override void Refresh(bool forceReload = false) { if (_jsRuntime == null) { - var absoluteUriString = ToAbsoluteUri(Uri).AbsoluteUri; - throw new NavigationException(absoluteUriString); + NavigationRedirectHelper.ThrowNavigationExceptionForRedirect(this, Uri); } _ = RefreshAsync(); From 47797e223288d83f64722946a597a4c86ad07679 Mon Sep 17 00:00:00 2001 From: SP Date: Tue, 9 Jul 2024 16:32:42 +0200 Subject: [PATCH 3/5] Removed 2nd NavigationException Constructor, NavigationRedirectHelper & NavigationRedirectHelper references & pass static message to NavigationException main constructor --- .../Components/src/NavigationException.cs | 16 +++++------ .../src/NavigationRedirectHelper.cs | 28 ------------------- .../Components/src/PublicAPI.Unshipped.txt | 3 -- .../HttpNavigationManager.cs | 3 +- .../src/Circuits/RemoteNavigationManager.cs | 6 ++-- 5 files changed, 13 insertions(+), 43 deletions(-) delete mode 100644 src/Components/Components/src/NavigationRedirectHelper.cs diff --git a/src/Components/Components/src/NavigationException.cs b/src/Components/Components/src/NavigationException.cs index 818ffbd3091d..f2b1af918551 100644 --- a/src/Components/Components/src/NavigationException.cs +++ b/src/Components/Components/src/NavigationException.cs @@ -8,18 +8,16 @@ namespace Microsoft.AspNetCore.Components; /// public class NavigationException : Exception { - /// - /// Initializes a new instance. - /// - public NavigationException(string uri) - { - Location = uri; - } + + private const string RedirectExceptionMessage = + "A navigation was initiated during static rendering. " + + "This exception is not an error, but instead signals to the framework that a redirect should occur. " + + "It should not be caught by application code."; /// - /// Initializes a new instance with a custom message. + /// Initializes a new instance. /// - public NavigationException(string uri, string message) : base(message) + public NavigationException(string uri) : base(RedirectExceptionMessage) { Location = uri; } diff --git a/src/Components/Components/src/NavigationRedirectHelper.cs b/src/Components/Components/src/NavigationRedirectHelper.cs deleted file mode 100644 index 9590f319dfb7..000000000000 --- a/src/Components/Components/src/NavigationRedirectHelper.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.Diagnostics.CodeAnalysis; - -namespace Microsoft.AspNetCore.Components; - -/// -/// Helper class to throw a . -/// -public static class NavigationRedirectHelper -{ - private const string RedirectExceptionMessage = - "A navigation was initiated during static rendering. " + - "This exception is not an error, but instead signals to the framework that a redirect should occur. " + - "It should not be caught by application code."; - - /// - /// Creates an absolute URI and throws a new . - /// - - [DoesNotReturn] - public static void ThrowNavigationExceptionForRedirect(NavigationManager navigationManager, string uri) - { - var absoluteUriString = navigationManager.ToAbsoluteUri(uri).AbsoluteUri; - throw new NavigationException(absoluteUriString, RedirectExceptionMessage); - } -} diff --git a/src/Components/Components/src/PublicAPI.Unshipped.txt b/src/Components/Components/src/PublicAPI.Unshipped.txt index 8ba2641b865e..e8c43eb034cf 100644 --- a/src/Components/Components/src/PublicAPI.Unshipped.txt +++ b/src/Components/Components/src/PublicAPI.Unshipped.txt @@ -4,8 +4,6 @@ Microsoft.AspNetCore.Components.ComponentBase.AssignedRenderMode.get -> Microsof Microsoft.AspNetCore.Components.ComponentBase.RendererInfo.get -> Microsoft.AspNetCore.Components.RendererInfo! Microsoft.AspNetCore.Components.ExcludeFromInteractiveRoutingAttribute Microsoft.AspNetCore.Components.ExcludeFromInteractiveRoutingAttribute.ExcludeFromInteractiveRoutingAttribute() -> void -Microsoft.AspNetCore.Components.NavigationException.NavigationException(string! uri, string! message) -> void -Microsoft.AspNetCore.Components.NavigationRedirectHelper Microsoft.AspNetCore.Components.RendererInfo Microsoft.AspNetCore.Components.RendererInfo.IsInteractive.get -> bool Microsoft.AspNetCore.Components.RendererInfo.Name.get -> string! @@ -25,7 +23,6 @@ Microsoft.AspNetCore.Components.ResourceAssetProperty Microsoft.AspNetCore.Components.ResourceAssetProperty.Name.get -> string! Microsoft.AspNetCore.Components.ResourceAssetProperty.ResourceAssetProperty(string! name, string! value) -> void Microsoft.AspNetCore.Components.ResourceAssetProperty.Value.get -> string! -static Microsoft.AspNetCore.Components.NavigationRedirectHelper.ThrowNavigationExceptionForRedirect(Microsoft.AspNetCore.Components.NavigationManager! navigationManager, string! uri) -> void static readonly Microsoft.AspNetCore.Components.ResourceAssetCollection.Empty -> Microsoft.AspNetCore.Components.ResourceAssetCollection! virtual Microsoft.AspNetCore.Components.RenderTree.Renderer.Assets.get -> Microsoft.AspNetCore.Components.ResourceAssetCollection! virtual Microsoft.AspNetCore.Components.RenderTree.Renderer.RendererInfo.get -> Microsoft.AspNetCore.Components.RendererInfo! diff --git a/src/Components/Endpoints/src/DependencyInjection/HttpNavigationManager.cs b/src/Components/Endpoints/src/DependencyInjection/HttpNavigationManager.cs index 3adc72e883f8..e9bb98f2d1c2 100644 --- a/src/Components/Endpoints/src/DependencyInjection/HttpNavigationManager.cs +++ b/src/Components/Endpoints/src/DependencyInjection/HttpNavigationManager.cs @@ -11,6 +11,7 @@ internal sealed class HttpNavigationManager : NavigationManager, IHostEnvironmen protected override void NavigateToCore(string uri, NavigationOptions options) { - NavigationRedirectHelper.ThrowNavigationExceptionForRedirect(this, uri); + var absoluteUriString = ToAbsoluteUri(uri).AbsoluteUri; + throw new NavigationException(absoluteUriString); } } diff --git a/src/Components/Server/src/Circuits/RemoteNavigationManager.cs b/src/Components/Server/src/Circuits/RemoteNavigationManager.cs index 3bd57d7f3117..a2a148945ee1 100644 --- a/src/Components/Server/src/Circuits/RemoteNavigationManager.cs +++ b/src/Components/Server/src/Circuits/RemoteNavigationManager.cs @@ -87,7 +87,8 @@ protected override void NavigateToCore(string uri, NavigationOptions options) if (_jsRuntime == null) { - NavigationRedirectHelper.ThrowNavigationExceptionForRedirect(this, uri); + var absoluteUriString = ToAbsoluteUri(uri).AbsoluteUri; + throw new NavigationException(absoluteUriString); } _ = PerformNavigationAsync(); @@ -127,7 +128,8 @@ public override void Refresh(bool forceReload = false) { if (_jsRuntime == null) { - NavigationRedirectHelper.ThrowNavigationExceptionForRedirect(this, Uri); + var absoluteUriString = ToAbsoluteUri(Uri).AbsoluteUri; + throw new NavigationException(absoluteUriString); } _ = RefreshAsync(); From 03dfcce518844a48e64eee791bb7209f7273e64a Mon Sep 17 00:00:00 2001 From: SP Date: Tue, 6 Aug 2024 16:59:56 +0200 Subject: [PATCH 4/5] Updated Version --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 01c597224000..b12e9eda1362 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20768,7 +20768,7 @@ }, "src/JSInterop/Microsoft.JSInterop.JS/src": { "name": "@microsoft/dotnet-js-interop", - "version": "8.0.0-dev", + "version": "9.0.0-dev", "license": "MIT", "devDependencies": { "@typescript-eslint/eslint-plugin": "^6.15.0", From 474fa2695bd8b1454e386307643bd233c95a3309 Mon Sep 17 00:00:00 2001 From: SP Date: Wed, 7 Aug 2024 10:21:39 +0200 Subject: [PATCH 5/5] Revert "Updated Version" This reverts commit 03dfcce518844a48e64eee791bb7209f7273e64a. --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index b12e9eda1362..01c597224000 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20768,7 +20768,7 @@ }, "src/JSInterop/Microsoft.JSInterop.JS/src": { "name": "@microsoft/dotnet-js-interop", - "version": "9.0.0-dev", + "version": "8.0.0-dev", "license": "MIT", "devDependencies": { "@typescript-eslint/eslint-plugin": "^6.15.0",