Closed
Description
Background and Motivation
Blazor customers may want to bypass interactive routing during programmatic navigations, falling back to server-side routing using enhanced navigation. This is particularly useful if the customer knows that SSR'd content needs to be refreshed. See #49414 for more info.
Proposed API
namespace Microsoft.AspNetCore.Components;
public readonly struct NavigationOptions
{
+ public bool PreferEnhancedNavigation { get; init; }
}
namespace Microsoft.AspNetCore.Components.Routing;
public interface INavigationInterception
{
+ Task DisableNavigationInterceptionAsync()
+ => Task.CompletedTask;
}
Edit: See updated proposed API here
Usage Examples
Attempt an enhanced navigation, falling back to client-side routing if enhanced navigation is not available:
var uri = ...
NavigationManager.NavigateTo(uri, new NavigationOptions()
{
PreferEnhancedNavigation = true,
});
Attempt an enhanced navigation, falling back to a full page reload if enhanced navigation is not available:
var uri = ...
NavigationManager.NavigateTo(uri, new NavigationOptions()
{
PreferEnhancedNavigation = true,
ForceLoad = true,
});
Alternative Designs
1. A simpler API that only supports the "enhaced page refresh" scenario
namespace Microsoft.AspNetCore.Components;
public abstract class NavigationManager
{
+ public void EnhancedRefresh();
}
This looks cleaner for what I anticipate will be the most common use of this new feature, which is performing an enhanced SSR for the current page. However, it doesn't allow bypassing the interactive router for navigations to other URLs.
2. Alternate names for PreferEnhancedNavigation
PreferSoftNavigation
- The term "enhanced" doesn't appear in our API surface yet, afaik. Another term (like "soft") might be clearer to customers.
BypassInteractiveRouter
- Changes the meaning of the feature slightly. This name seems to imply it would perform enhanced navigation if possible, falling back to a full page reload if either
ForceLoad
is true or enhanced navigation is not available. It would not allow the customer to fall back to interactive routing if enhanced navigation could not be performed. We might need to think more deeply about whether falling back to interactive routing is ever desirable, or if it would always be preferable to fall back to a full page reload.
- Changes the meaning of the feature slightly. This name seems to imply it would perform enhanced navigation if possible, falling back to a full page reload if either
Risks
None.