You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8 Blazor中NotFound与NotAuthorized失效问题求助

.NET 8 Blazor Auto模式下未授权跳转与NotFound页面处理方案

一、修正未授权跳转路径至自定义/login

默认身份验证会跳转到/account/login,需在服务配置中指定自定义登录路径:

在Program.cs中配置Cookie认证选项:

using Microsoft.AspNetCore.Authentication.Cookies;

// ... 其他服务配置 ...

builder.Services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
    options.LoginPath = "/login"; // 替换为你的自定义登录页路由
    options.AccessDeniedPath = "/access-denied"; // 可选:权限不足时的跳转路径
});

// 确保添加授权中间件
app.UseAuthentication();
app.UseAuthorization();

二、处理NotFound页面显示问题

要同时解决客户端路由未匹配和服务器端404请求的问题,需分两步配置:

1. 配置NotFound组件路由

在你的NotFound.razor组件顶部添加路由标记:

@page "/not-found"

2. 自定义状态码页面逻辑

替换UseStatusCodePagesWithRedirects为自定义状态码处理,精准区分401和404:

在Program.cs的中间件部分添加:

using Microsoft.AspNetCore.Http;

// ... 其他中间件配置 ...

app.UseStatusCodePages(async context =>
{
    var response = context.HttpContext.Response;
    
    if (response.StatusCode == StatusCodes.Status401Unauthorized)
    {
        response.Redirect("/login");
    }
    else if (response.StatusCode == StatusCodes.Status404NotFound)
    {
        response.Redirect("/not-found");
    }
});

3. 优化Router的未授权与NotFound逻辑

修改App.razor,将未授权时直接渲染Login组件改为路由跳转(避免URL停留在受保护页面的状态异常),同时确保NotFound组件使用统一布局:

@using HTPB.Client.Pages
@using Microsoft.AspNetCore.Components.Authorization
@inject NavigationManager NavigationManager

<CascadingAuthenticationState>
    <Router AppAssembly="@typeof(Program).Assembly" AdditionalAssemblies="new[] { typeof(Client._Imports).Assembly }">
        <Found Context="routeData">
            <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(Layout.MainLayout)">
                <NotAuthorized>
                    @{
                        // 跳转到登录页,forceLoad设为false保持Blazor客户端导航
                        NavigationManager.NavigateTo("/login", forceLoad: false);
                    }
                </NotAuthorized>
            </AuthorizeRouteView>
        </Found>
        <NotFound>
            <Layout.MainLayout>
                <NotFound></NotFound>
            </Layout.MainLayout>
        </NotFound>
    </Router>
</CascadingAuthenticationState>

三、Auto模式注意事项

  • 确保AdditionalAssemblies正确包含客户端程序集,保证服务器端渲染时能找到客户端组件
  • WebAssembly交互模式下,客户端路由优先处理,服务器端仅处理初始请求和API请求,状态码处理主要覆盖服务器端返回的404/401场景

内容的提问来源于stack exchange,提问作者Lazar Nikolić

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 23:13:21