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

ASP.NET Core 7.0如何配置策略检查失败后的自定义跳转页面

在ASP.NET Core 7.0中配置授权失败跳转指定页面

方法1:通过Cookie认证配置直接指定拒绝路径

如果项目使用Cookie认证,直接在Program.cs的认证服务配置中设置AccessDeniedPath即可,这是最直接的方式:

using Microsoft.AspNetCore.Authentication.Cookies;

var builder = WebApplication.CreateBuilder(args);

// 添加认证服务并配置Cookie选项
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        // 替换为你需要跳转的指定页面路径
        options.AccessDeniedPath = "/Account/AccessDenied";
    });

// 确保添加授权服务
builder.Services.AddAuthorization();

var app = builder.Build();

// 启用认证和授权中间件
app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();
app.MapRazorPages();

app.Run();

方法2:自定义授权结果处理器(适配复杂场景)

如果需要根据不同授权失败原因做差异化处理,可以实现IAuthorizationMiddlewareResultHandler接口接管授权失败逻辑:

1. 创建自定义授权结果处理器类

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Authorization.Policy;

public class CustomAuthorizationHandler : IAuthorizationMiddlewareResultHandler
{
    private readonly AuthorizationMiddlewareResultHandler _defaultHandler = new();

    public async Task HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)
    {
        // 处理授权拒绝的情况
        if (authorizeResult.Forbidden)
        {
            // 跳转至指定页面
            context.Response.Redirect("/Account/AccessDenied");
            return;
        }

        // 其他授权结果使用默认处理逻辑
        await _defaultHandler.HandleAsync(next, context, policy, authorizeResult);
    }
}

2. 注册自定义处理器到服务容器

在Program.cs中添加代码,替换默认的授权结果处理器:

builder.Services.AddSingleton<IAuthorizationMiddlewareResultHandler, CustomAuthorizationHandler>();

确保拒绝页面使用站点布局

最后,要保证指定的拒绝页面使用站点统一布局模板,比如在Razor视图中明确指定:

@{
    // 替换为站点实际使用的布局文件名称
    Layout = "_MainLayout";
}

<div class="container">
    <h1>访问被拒绝</h1>
    <p>你没有权限访问该页面,请联系系统管理员获取权限。</p>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:42:12