Devolutions/UniGetUI · warning · InvalidOperationException

Unsupported page \" \". Supported pages: .

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.

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.

Appendix: 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)