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

使用Razor页面Authorize特性时,授权失败如何重定向至自定义拒访页?

实现Razor页面授权失败重定向到自定义页面

1. 给自定义拒绝页面开匿名访问权限

在你开发好的AccessDenied.cshtml页面顶部加上[AllowAnonymous]属性,避免因权限限制陷入循环跳转:

@page
@model AccessDeniedModel
[AllowAnonymous]
@{
    ViewData["Title"] = "访问被拒绝";
}

2. 配置认证与授权的跳转路径

根据你使用的.NET版本(.NET 6+ 用Program.cs,旧版本用Startup.cs),在服务配置中设置跳转规则:

.NET 6+ (Program.cs)

var builder = WebApplication.CreateBuilder(args);

// 添加Razor页面服务
builder.Services.AddRazorPages();

// 配置Cookie认证的跳转路径
builder.Services.ConfigureApplicationCookie(options =>
{
    // 未登录(未认证)的默认跳转路径(可选,需修改默认登录页时调整)
    options.LoginPath = "/Account/Login";
    // 重点:已登录但无权限(授权失败)时跳转到自定义页面
    options.AccessDeniedPath = "/AccessDenied";
});

// 可选:用授权策略替代直接在页面写Roles(后续权限变更更灵活)
builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("HRFinanceAccess", policy =>
        policy.RequireRole("HRManager", "Finance"));
});

var app = builder.Build();

// 中间件配置(保留其他标准中间件)
app.UseAuthentication();
app.UseAuthorization();

app.MapRazorPages();

app.Run();

3. 更新页面的授权标注

如果用了上面的自定义授权策略,把页面顶部的[Authorize(Roles = "HRManager,Finance")]替换为:

[Authorize(Policy = "HRFinanceAccess")]

不想用策略的话,继续保留原Roles标注也可,只要Cookie配置里设置了AccessDeniedPath,授权失败时会自动跳转。

额外说明

  • 未登录的请求默认跳LoginPath配置的页面,若需将未认证请求也重定向到自定义拒绝页,直接把options.LoginPath改为"/AccessDenied"即可,但通常建议保留登录页跳转,方便用户登录后重试。
  • 已登录但无权限的请求,会自动跳转到你配置的自定义拒绝页面,无需额外编写代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:30:49