В Razor Pages, каков рекомендуемый способ запуска действия без пользовательского интерфейса - PullRequest
1 голос
/ 23 октября 2019

Я хочу реализовать метод выхода, который просто выводит пользователя из системы и перенаправляет на домашнюю страницу. Как мне настроить маршрутизацию и будет ли код идти в контроллер, или мне нужно создать новую страницу для этого? Может показаться странным, поскольку не требует пользовательского интерфейса.

Ответы [ 3 ]

1 голос
/ 23 октября 2019

asp-page укажите имя страницы, в которой находится метод выхода. Атрибут asp-page-handler является дополнением к asp-page. asp-page-handler создает URL-адреса, которые передаются каждому из методов-обработчиков, определенных страницей. Измените значение _LoginPartial.cshtml следующим образом:

@if (SignInManager.IsSignedIn(User))
{
<li class="nav-item">
    <a  class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @User.Identity.Name!</a>
</li>
<li class="nav-item">
    <a class="nav-link text-dark" asp-page="/Index" asp-page-handler="SignOut">Logout</a>
</li>
}

IndexModel домашней страницы, параметр RedirectToPage объединяется с путем к текущей странице для вычисления имени целевой страницы.

    public class IndexModel : PageModel
    {
    private readonly SignInManager<ApplicationUser> _signInManager;
    private readonly ILogger<LogoutModel> _logger;

    public IndexModel(SignInManager<ApplicationUser> signInManager, ILogger<LogoutModel> logger)
    {
        _signInManager = signInManager;
        _logger = logger;
    }
    public void OnGet()
    {

    }

    public async Task<IActionResult> OnGetSignOut()
    {
        await _signInManager.SignOutAsync();
        _logger.LogInformation("User logged out.");

        return RedirectToPage("/Index");

    }
}

Результат:

enter image description here

Ссылка для RedirectToPage: https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-3.0&tabs=visual-studio#url-generation-for-pages

1 голос
/ 23 октября 2019

Создайте метод с именем GetSignOut(), затем добавьте кнопку или тег <a></a> и добавьте его к его атрибутам asp-route-handler="signout" Наконец, в вашем GetSignOut() сделайте все, что связано с выходом из системы, и, наконец, return redirectToPage("pageName")

0 голосов
/ 23 октября 2019

Исходный шаблон проекта Razor Pages включал AccountController , у которого был один метод - Logout. Обоснованием было то, что для процесса выхода из системы не требовался пользовательский интерфейс, поэтому было бы странным создать для него страницу Razor, когда целью Razor Pages является генерация HTML.

Если вы создадите Identity в существующем проекте, вы получите файл Logout.cshtml , который перенаправляет использование на обратный URL-адрес, если он указан, или отображает «вы вошли в систему». выход "в противном случае.

Таким образом, оба подхода предполагают, что рекомендуется использовать Razor Pages для генерации HTML и контроллеры для сервисов, не связанных с HTML.

...