У меня возникла проблема с .NET 8 и Blazor. Для интерактивного режима рендеринга установлено значение «Авто» (сервер и WebAssembly). Проблема в том, что когда я добавляю NotAuthorized и NotFound, не удается перейти ни на мою страницу входа, ни на мою страницу NotFound. Добавление UseStatusCodePagesWithRedirects позволяет мне перейти на одну из страниц, но я хочу, чтобы неавторизованные запросы перенаправлялись на страницу входа, а запросы несуществующих страниц перенаправлялись на NotFound.
Если страница не существует, она отобразит ошибку браузера по умолчанию «страница не найдена». Если страница существует, а я не вошел в систему, она перейдет к «учетной записи/логина» вместо «/login», который является путем к моему компоненту входа.
Есть ли у вас идеи, как этого добиться? Я искал в Интернете, но не смог найти полного решения моей проблемы.
@using HTPB.Client.Pages
@using Microsoft.AspNetCore.Components.Authorization
<CascadingAuthenticationState>
<Router AppAssembly = "@typeof(Program).Assembly" AdditionalAssemblies = "new[] { typeof(Client._Imports).Assembly }">
<Found Context = "routeData">
<AuthorizeRouteView RouteData = "@routeData" DefaultLayout = "@typeof(Layout.MainLayout)">
<NotAuthorized>
<Login></Login>
</NotAuthorized>
</AuthorizeRouteView>
</Found>
<NotFound>
<NotFound></NotFound>
</NotFound>
</Router>
</CascadingAuthenticationState>
Я это сделал, но он не работает должным образом, или я сделал что-то не так.
Шаблоны проектов работают. Если бы они этого не сделали, многие разработчики Blazor заметили бы это, потому что даже учебные пособия не смогли бы запуститься. Вы действительно создали новый проект с отдельными учетными записями, попытались запустить его и увидели, что он не перенаправляется? Или вы пробовали только после изменения исходного кода на что-то другое?
@PanagiotisKanavos Я сталкиваюсь с той же проблемой, даже если это новый проект Blazor... Вы что-нибудь об этом узнали???

Похоже, вы столкнулись с некоторыми проблемами маршрутизации в приложении Blazor при обработке неавторизованных и ненайденных запросов. Попробуем разобраться с этим шаг за шагом. 1. Обработка несанкционированных запросов: Чтобы перенаправить неавторизованные запросы на вашу страницу входа («/login»), вы можете использовать компонент AuthorizeView в макете Blazor или на определенных страницах, где требуется проверка подлинности. Вот базовый пример:
<AuthorizeView>
<Authorized>
<!-- Content for authenticated users -->
</Authorized>
<NotAuthorized>
<RedirectToLogin />
</NotAuthorized>
</AuthorizeView>
Убедитесь, что компонент страницы входа правильно настроен по маршруту «/login». 2. Обработка не найденных запросов: Для обработки ненайденных запросов и перенаправления их на пользовательскую страницу NotFound вы можете использовать компонент NotFound, предоставляемый Blazor Router. Вот как вы можете это настроить: В вашем App.razor или компоненте макета:
<Router AppAssembly = "@typeof(Program).Assembly">
<Found Context = "routeData">
<!-- Your existing routes -->
<RouteView RouteData = "@routeData" DefaultLayout = "@typeof(MainLayout)" />
</Found>
<NotFound>
<RedirectToNotFound />
</NotFound>
</Router>
Убедитесь, что у вас есть компонент с именем RedirectToNotFound, который выполняет логику перенаправления на вашу пользовательскую страницу NotFound.
3. Работа с перенаправлениями: Похоже, вы хотите, чтобы неавторизованные запросы перенаправлялись на «/login», а не на «/account/login». Этого можно добиться, настроив промежуточное программное обеспечение аутентификации в файле Startup.cs.
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.LoginPath = "/login"; // Set the login path to "/login"
options.AccessDeniedPath = "/access-denied"; // If needed, set the access denied path
});
Это должно гарантировать, что неавторизованные запросы будут перенаправлены на «/login». Выполнив эти шаги и обеспечив правильную настройку, вы сможете эффективно обрабатывать неавторизованные и не найденные запросы в своем приложении Blazor. Если у вас возникнут какие-либо конкретные проблемы или возникнут дополнительные вопросы, не стесняйтесь спрашивать!
Я уже пробовал использовать <RedirectToNotFound/> и <RedirectToLogin/>. Но он не работает с .NET 8, когда я использую режим рендеринга «Авто». Но options.LoginPath = "/login"; работает отлично. Что касается NotFound, мне удалось создать RoutingMiddleware, чтобы проверить, равен ли код состояния 404, а затем перенаправить на страницу NotFound.
Это почти наверняка ответ ChatGPT, учитывая, насколько он многословен и в то же время расплывчат.
Проблема с ChatGPT 3.5 заключается в том, что он не знает ничего, связанного с Blazor и .NET 8.
Шаблон по умолчанию должен настроить все это при создании нового проекта с аутентификацией. Вы пробовали это?