Мы создаем серверное приложение Blazor (на основе .NET 8) с двумя страницами: домашней страницей и страницей результатов. На домашней странице есть поле для ввода «Дата рождения» и кнопка для перехода на страницу результатов.
Мы хотим перейти на страницу результатов ТОЛЬКО с главной страницы с заполненной датой рождения. Страница результатов не должна быть доступна путем ввода URL-адреса в браузере или с помощью кнопки «Назад». Если пользователь вводит URL-адрес страницы результатов непосредственно в браузере, его необходимо перенаправить на домашнюю страницу.
Есть ли у кого-нибудь идеи о том, как заставить такое поведение? Есть ли способ проверить, является ли запрос POST, а если нет, перенаправить обратно на другую страницу? Или запретить пользователям доступ к этой странице, если она исходит не с домашней страницы?
Заранее большое спасибо.





Вам не нужны два маршрута. Все в пользовательском интерфейсе является компонентом, поэтому используйте одну страницу (маршрутизируемый компонент), которая показывает компонент результатов, когда состояние действительно.
Маршрута до Results нет, поэтому нет навигации.
Вот быстрая демонстрация:
// Results.razor
<h3>Results</h3>
Here be the results!
@code {
}
И домой:
@page "/"
<PageTitle>Home</PageTitle>
<h1>Hello, world!</h1>
Welcome to your new app.
@if (_valid)
{
<div class = "mb-2">
<button class = "btn btn-primary" @onclick = "this.OnClick">Go Back</button>
</div>
<Results />
}
else
{
<div class = "mb-2">
<button class = "btn btn-primary" @onclick = "this.OnClick">Valid Data Submit</button>
</div>
}
@code {
private bool _valid;
private Task OnClick()
{
_valid = !_valid;
return Task.CompletedTask;
}
}
В обычном приложении Blazor нет сообщений, только начальная страница. Это СПА. Если вы каждый раз отправляете сообщение на сервер, это не совсем приложение Blazor.
Да, это имеет смысл. Я реализовал решение, и оно работает. Спасибо!
Интересный подход, спасибо!