dotnet/aspnetcore · error · NotImplementedException

The type does not support supplying . To add support, that…

Error message

The type {GetType().FullName} does not support supplying {nameof(NavigationOptions)}. To add support, that type should override {nameof(NavigateToCore)}(string uri, {nameof(NavigationOptions)} options).

What it means

The base NavigationManager.NavigateToCore(string, NavigationOptions) throws NotImplementedException by default. Custom subclasses written before .NET 6 that only override the older NavigateToCore(string, bool) overload will not support options-based navigation (including replace=true).

Solutions

  1. Override NavigateToCore(string uri, NavigationOptions options) in the custom subclass and apply the options.
  2. Update to a newer version of the library/NavigationManager implementation.
  3. Avoid passing NavigationOptions or replace=true if the implementation does not support it.

Example fix

// before
protected override void NavigateToCore(string uri, bool forceLoad) { ... }
// after
protected override void NavigateToCore(string uri, NavigationOptions options)
{
    // apply options.ForceLoad, options.ReplaceHistoryEntry
    ...
}
Defensive patterns

Strategy: validation

Validate before calling

// In a custom NavigationManager, override the options overload.
protected override void NavigateToCore(string uri, NavigationOptions options)
{
    // honor options.ForceLoad and options.ReplaceHistoryEntry
    NavigateToCore(uri, options.ForceLoad);
}

Prevention

When it happens

Trigger: A custom NavigationManager subclass overrides NavigateToCore(string, bool) but not NavigateToCore(string, NavigationOptions), then a caller passes NavigationOptions or replace=true.

Common situations: Legacy or third-party NavigationManager not updated for .NET 6+, a test double that omits the new overload, or an older library version in a newer app.

Related errors


AI-assisted analysis of dotnet/aspnetcore@3600ca084e (2026-08-11). Data as JSON: /api/errors/dc50af56922b8125. Report an issue: GitHub.

Appendix: source

Thrown at src/Components/Components/src/NavigationManager.cs:245

    /// </summary>
    /// <param name="uri">The destination URI. This can be absolute, or relative to the base URI
    /// (as returned by <see cref="BaseUri"/>).</param>
    /// <param name="forceLoad">If true, bypasses client-side routing and forces the browser to load the new page from the server, whether or not the URI would normally be handled by the client-side router.</param>
    // The reason this overload exists and is virtual is for back-compat with < 6.0. Existing NavigationManager subclasses may
    // already override this, so the framework needs to keep using it for the cases when only pre-6.0 options are used.
    // However, for anyone implementing a new NavigationManager post-6.0, we don't want them to have to override this
    // overload any more, so there's now a default implementation that calls the updated overload.
    protected virtual void NavigateToCore([StringSyntax(StringSyntaxAttribute.Uri)] string uri, bool forceLoad)
        => NavigateToCore(uri, new NavigationOptions { ForceLoad = forceLoad });

    /// <summary>
    /// Navigates to the specified URI.
    /// </summary>
    /// <param name="uri">The destination URI. This can be absolute, or relative to the base URI
    /// (as returned by <see cref="BaseUri"/>).</param>
    /// <param name="options">Provides additional <see cref="NavigationOptions"/>.</param>
    protected virtual void NavigateToCore([StringSyntax(StringSyntaxAttribute.Uri)] string uri, NavigationOptions options) =>
        throw new NotImplementedException($"The type {GetType().FullName} does not support supplying {nameof(NavigationOptions)}. To add support, that type should override {nameof(NavigateToCore)}(string uri, {nameof(NavigationOptions)} options).");

    /// <summary>
    /// Refreshes the current page via request to the server.
    /// </summary>
    /// <remarks>
    /// If <paramref name="forceReload"/> is <c>true</c>, a full page reload will always be performed.
    /// Otherwise, the response HTML may be merged with the document's existing HTML to preserve client-side state,
    /// falling back on a full page reload if necessary.
    /// </remarks>
    public virtual void Refresh(bool forceReload = false)
        => NavigateTo(Uri, forceLoad: true, replace: true);

    /// <summary>
    /// Handles setting the NotFound state.
    /// </summary>
    public void NotFound() => NotFoundCore();

    private void NotFoundCore()

View on GitHub (pinned to 3600ca084e)