Devolutions/UniGetUI · warning · InvalidOperationException

Unsupported page \"{page}\". Supported pages: {string.Join("

Error message

Unsupported page \"{page}\". Supported pages: {string.Join(", ", SupportedPages)}.

What it means

IpcAppPages.NormalizePageName lower-cases and trims the input, then matches it against the twelve supported page names (discover, updates, installed, bundles, settings, managers, own-log, manager-log, operation-history, help, release-notes, about). Any input that does not exactly match one of these after normalization throws InvalidOperationException, listing the full set of supported pages in the message.

Source

Thrown at src/UniGetUI.Interface.IpcApi/IpcAppApi.cs:59

    {
        ArgumentException.ThrowIfNullOrWhiteSpace(page);

        string normalized = page.Trim().ToLowerInvariant();
        return normalized switch
        {
            "discover" => normalized,
            "updates" => normalized,
            "installed" => normalized,
            "bundles" => normalized,
            "settings" => normalized,
            "managers" => normalized,
            "own-log" => normalized,
            "manager-log" => normalized,
            "operation-history" => normalized,
            "help" => normalized,
            "release-notes" => normalized,
            "about" => normalized,
            _ => throw new InvalidOperationException(
                $"Unsupported page \"{page}\". Supported pages: {string.Join(", ", SupportedPages)}."
            ),
        };
    }

    public static string ToPageName(string? pageTypeName)
    {
        if (string.IsNullOrWhiteSpace(pageTypeName))
        {
            return "";
        }

        return pageTypeName switch
        {
            "Discover" => "discover",
            "Updates" => "updates",
            "Installed" => "installed",
            "Bundles" => "bundles",

View on GitHub (pinned to 9b1d7d0eab)

Solutions

  1. Use one of the exact supported page keys: discover, updates, installed, bundles, settings, managers, own-log, manager-log, operation-history, help, release-notes, about.
  2. Before navigating, fetch IpcAppPages.SupportedPages (exposed via AppInfoProvider) and validate the input.
  3. If using a PascalCase type name, route it through ToPageName first, which returns the canonical lowercase key.
  4. Fix typos: the correct plural forms are "updates", "managers".

Example fix

// before: wrong page name
await ipc.NavigateAppAsync("home");
// after: use a supported page name
await ipc.NavigateAppAsync("discover");
Defensive patterns

Strategy: validation

Validate before calling

string page = "discover";
if (!IpcAppPages.SupportedPages.Contains(page.Trim().ToLowerInvariant()))
    throw new ArgumentException($"Unknown page: {page}");

Type guard

static bool IsValidPage(string page) =>
    IpcAppPages.SupportedPages.Contains(page.Trim().ToLowerInvariant(), StringComparer.OrdinalIgnoreCase);

Try / catch

try { IpcAppPages.NormalizePageName(page); }
catch (InvalidOperationException ex) { Logger.Warn(ex.Message); /* show supported list to user */ }

Prevention

When it happens

Trigger: An IPC client sends a navigate command with a page name not in the supported set — e.g. "packages", "log", "home", "dashboard", or a typo like "update" (singular). NormalizePageName is also reachable when a client sends a PascalCase type name that ToPageName did not map.

Common situations: A client uses a page name from an older or newer version where the supported set differs. A typo in the page string. A client sends a human-readable label instead of the canonical key. A third-party integration guesses page names rather than consulting SupportedPages.

Related errors


AI-assisted analysis of Devolutions/UniGetUI@9b1d7d0eab (2026-08-13). Data as JSON: /api/errors/d13a37a7ff443eb5. Report an issue: GitHub.