Blazor NotFound и NotAuthorized не работают в .net 8

У меня возникла проблема с .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>

Шаблон по умолчанию должен настроить все это при создании нового проекта с аутентификацией. Вы пробовали это?

Panagiotis Kanavos 15.05.2024 12:51

Я это сделал, но он не работает должным образом, или я сделал что-то не так.

Lazar Nikolić 15.05.2024 16:56

Шаблоны проектов работают. Если бы они этого не сделали, многие разработчики Blazor заметили бы это, потому что даже учебные пособия не смогли бы запуститься. Вы действительно создали новый проект с отдельными учетными записями, попытались запустить его и увидели, что он не перенаправляется? Или вы пробовали только после изменения исходного кода на что-то другое?

Panagiotis Kanavos 15.05.2024 16:58

@PanagiotisKanavos Я сталкиваюсь с той же проблемой, даже если это новый проект Blazor... Вы что-нибудь об этом узнали???

Miky-Bet 08.07.2024 00:35
Для развертывания Сайтов с использованием Blazor, Angular и React с репозиторием на GitHub на Cloudflare
Для развертывания Сайтов с использованием Blazor, Angular и React с репозиторием на GitHub на Cloudflare
Как развернуть сайты с помощью Blazor, Angular и React с репозиторием на GitHub на Cloudflare.
0
4
409
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вы столкнулись с некоторыми проблемами маршрутизации в приложении 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.

Lazar Nikolić 15.05.2024 12:50

Это почти наверняка ответ ChatGPT, учитывая, насколько он многословен и в то же время расплывчат.

Panagiotis Kanavos 15.05.2024 12:51

Проблема с ChatGPT 3.5 заключается в том, что он не знает ничего, связанного с Blazor и .NET 8.

Lazar Nikolić 15.05.2024 12:58

Другие вопросы по теме