Я использую ASP.NET Core 2.1 для создания сервера идентификации.Я использую Asp Identity и создаю страницы входа и регистрации.
У меня есть следующая страница:
[AllowAnonymous]
public class RegisterModel : PageModel
{
......
public string ReturnUrl { get; set; }
......
public void OnGet(string returnUrl = null)
{
ReturnUrl = returnUrl;
}
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
if (ModelState.IsValid)
{
return LocalRedirect(returnUrl);
}
return Page();
}
Cshtml содержит:
@page
@model RegisterModel
......
<form asp-route-returnUrl="@Model.ReturnUrl" method="post">
......
Поведение: Я попадаю на страницу по этой ссылке: https://localhost:5028/Identity/Account/Register?returnUrl=testlink, поэтому ReturnUrl получает значение "testlink" в OnGet () и передается в форму.
- Правильно: если я создаю пользователя без ошибок проверки (ModelState действителен), то LocalRedirect (returnurl) вызывается с помощью "testlink".
- Неправильно: если я создаю пользователя с ошибками проверки (ModelStateневерно), затем вызывается функция Page ().Проблема в том, что в этом случае страница генерируется с пустой моделью (@ Model.ReturnUrl имеет значение null).Пользователь видит ошибки проверки в форме, исправляет их, но когда он отправляет форму, он не будет перенаправлен на «testlink», потому что она была потеряна.
Мой вопрос: Чем заменить " return Page (); ", чтобы я мог исправить поведение, описанное в случае 2?Я попытался " return LocalRedirect (" / Identity / Account / Register? ReturnUrl = "+ returnUrl) ", но это обновляет страницу (очищает ввод пользователя и не отображает сообщения об ошибках проверки).
Спасибо!