Итак, у меня есть это приложение, которое выглядит следующим образом:
Pages
├─Restricted
│ ├─Index
│ └─SecretPage
├─Index
└─UserPage
Index
страница позволяет анонимный доступ и имеет форму входа, UserPage
страница может быть доступна любому аутентифицированному пользователю, и страницыв папке Restricted
могут получить доступ только авторизованные пользователи.
Неаутентифицированный пользователь может попытаться получить доступ к странице UserPage
или страницам в папке Restricted
, но затем они будут перенаправлены на Index
страниц (в корне) для входа в систему. В этом случае URL будет выглядеть примерно так: https://example.com/?returnUrl=UserPage
или https://example.com/?returnUrl=Restricted
.
Чтобы перенаправить пользователя после входа в систему, куда он хотел перейти, у меня былоследующий код:
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
var redirectTarget = string.Empty;
// try to authenticate the user
if (/* the log in attempt is successful */)
{
// do the log in stuff; i.e., Claims and SignInAsync
redirectTarget = string.IsNullOrWhiteSpace(returnUrl) ? "UserPage" : returnUrl;
}
return RedirectToPage(redirectTarget);
}
Это прекрасно работает, пока returnUrl
является страницей;Однако, когда returnUrl
является папкой;например, Restricted
, выдается «InvalidOperationException: ни одна страница с именем« / Restricted »не соответствует предоставленным значениям».
Итак, я переключился на Redirect(redirectTarget)
, но эта неправильно перенаправляет пользователя на Index/UserPage
вместо UserPage
, если returnUrl
было null
или пусто.Кроме того, это означает, что мне нужно жестко закодировать URL для входа / текущей страницы;т. е. /
, вместо зависимости от метода перенаправления для перенаправления пользователя на ту же страницу в случае неудачной попытки входа в систему, например, что делает RedirectToPage
.
Я могу решить перенаправление на UserPage
выдача с использованием /UserPage
вместо UserPage
;то есть, префикс это с /
.Однако это означает, что веб-сайт не может быть размещен в виртуальном каталоге, поскольку UserPage
не будет находиться в корне веб-сайта.
Любой чистый способ сделать такой вид перенаправления?
PS приложение использует ASP.NET Core 2.2, работающее на .NET Core 2.2.