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
相关产品推荐
相关产品推荐

