Как перенаправить на домашнюю страницу? - PullRequest
2 голосов
/ 09 января 2020

Страница ConfirmEmail содержит:

public async Task<IActionResult> OnGetAsync(string userId, string code)
{
    if (userId == null || code == null)
    {
        return RedirectToPage("/Index"); // <----------error
    }

    var user = await _userManager.FindByIdAsync(userId);
    if (user == null)
    {
        return NotFound($"Unable to load user with ID '{userId}'.");
    }

    code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
    var result = await _userManager.ConfirmEmailAsync(user, code);
    StatusMessage = result.Succeeded ? "Thank you for confirming your email." : "Error confirming your email.";

    return Page();
}

Но когда я проверяю ее на нулевые параметры, она пытается перенаправить на страницу, возвращает RedirectToPage ("/ Index");

генерирует исключение:

Произошло необработанное исключение при обработке запроса. InvalidOperationException: ни одна страница с именем '/ Index' не соответствует предоставленным значениям

Как перенаправить на домашнюю страницу?

Ответы [ 3 ]

1 голос
/ 09 января 2020

В Blazor Вы должны использовать Microsoft.AspNetCore.Components.NavigationManager.

@inject NavigationManager NavigationManager

if (userId == null || code == null)
    {
        NavigationManager.NavigateTo("/Index"); // <----------error
    }
0 голосов
/ 10 января 2020

RedirectToPage() возвращает IActionResult, который перенаправляет HTTP на маршрут, который вы указали, указав путь к странице Razor . Страницы Razor - это файлы .cshtml внутри папки Pages.

Если вы используете Blazor, то, скорее всего, вы используете клиентский маршрутизатор, с которым он поставляется. В этом случае есть только одна страница Razor _Host.cshtml, которая будет выступать в качестве основной точки входа в ваше приложение Blazor.

Итак, что вы могли бы сделать, это перенаправить на /_Host хотя я бы не советовал. Вместо этого лучше всего просто перенаправить приложение root, без , спрашивающего маршрутизатор конечной точки на стороне сервера, каков маршрут, - вероятно, лучшая идея:

return LocalRedirect("/");
0 голосов
/ 09 января 2020

Это работает, если страницы расположены в разных папках

return Redirect("~/");
...