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

Blazor文件夹授权不生效 未登录用户可访问受限内容求助

问题原因
  • 你配置的options.Conventions.AuthorizeFolder是Razor Pages专属的授权约定,仅对物理存放在/Pages/client路径下的.cshtml Razor页面生效。而Blazor Server采用的是客户端组件路由,所有访问路径最终都会回退到/_Host.cshtml这一个Razor页面渲染,你给/client文件夹加的授权规则根本不会被触发。
  • Blazor自身的路由系统默认不会自动继承Razor Pages的授权配置,没有额外配置的情况下所有路由都是公开可访问的。
修复步骤

1. 替换Blazor路由组件为带授权校验的版本

打开App.razor,将默认的RouteView替换为AuthorizeRouteView,同时配置未授权用户的跳转逻辑:

<CascadingAuthenticationState>
    <Router AppAssembly="@typeof(App).Assembly">
        <Found Context="routeData">
            <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)">
                <NotAuthorized>
                    @if (context.User.Identity?.IsAuthenticated == false)
                    {
                        <RedirectToLogin />
                    }
                    else
                    {
                        <p>权限不足,无法访问当前页面</p>
                    }
                </NotAuthorized>
            </AuthorizeRouteView>
            <FocusOnNavigate RouteData="@routeData" Selector="h1" />
        </Found>
        <NotFound>
            <PageTitle>404 未找到</PageTitle>
            <LayoutView Layout="@typeof(MainLayout)">
                <p>抱歉,你访问的页面不存在</p>
            </LayoutView>
        </NotFound>
    </Router>
</CascadingAuthenticationState>

新增Shared/RedirectToLogin.razor组件实现登录跳转:

@inject NavigationManager NavManager
@code {
    protected override void OnInitialized()
    {
        NavManager.NavigateTo($"Identity/Account/Login?returnUrl={Uri.EscapeDataString(NavManager.Uri)}", forceLoad: true);
    }
}

2. 给/client路径的Blazor页面添加角色校验

所有路由前缀为/client的Blazor页面组件顶部,添加角色授权属性即可:

@attribute [Authorize(Roles = "Owners")]
@page "/client/dashboard"
@* 其余页面内容 *@

如果/client下的页面都存放在独立的文件夹中,也可以直接在该文件夹下的_Imports.razor里统一加@attribute [Authorize(Roles = "Owners")],不需要每个页面重复加。

可选清理

你之前配置的options.Conventions.AuthorizeFolder("/client", "Owners")对Blazor路由完全无效,可以直接删除。

内容的提问来源于stack exchange,提问作者Zoinky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:45:00