ASP.NET Core 2.2 + Identity:如何将访问拒绝重定向至自定义页面?
解决ASP.NET Core 2.2 Identity自定义访问拒绝页面的配置问题
我来帮你搞定这个问题!在ASP.NET Core 2.2结合Identity的项目中,要让访问被拒绝时跳转到自定义页面,只需要完成以下几个关键步骤:
1. 准备自定义访问拒绝页面
首先你需要创建对应的页面文件:
- 如果你用的是MVC模式:在
Views/Account目录下新建AccessDenied.cshtml视图文件,同时在AccountController中添加对应的Action方法:public class AccountController : Controller { // 处理访问拒绝请求的Action public IActionResult AccessDenied() { // 可选:获取ReturnUrl并传递到视图,方便用户后续跳转 ViewData["ReturnUrl"] = Request.Query["ReturnUrl"]; return View(); } } - 如果你用的是Razor Pages模式:直接在
Pages/Account目录下新建AccessDenied.cshtml页面即可,不需要额外的控制器。
2. 配置Identity的Cookie选项
在Startup.cs的ConfigureServices方法中,找到Identity的注册代码,添加ConfigureApplicationCookie来指定访问拒绝页面的路径:
public void ConfigureServices(IServiceCollection services) { // 你的Identity基础注册代码 services.AddIdentity<IdentityUser, IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders(); // 配置Cookie授权选项,指定访问拒绝页面路由 services.ConfigureApplicationCookie(options => { // 设置自定义访问拒绝页面的路径 options.AccessDeniedPath = "/Account/AccessDenied"; // 可选:配置其他Cookie相关路径,比如登录、登出 options.LoginPath = "/Account/Login"; options.LogoutPath = "/Account/Logout"; // 还可以按需配置Cookie过期时间、名称等 options.ExpireTimeSpan = TimeSpan.FromMinutes(30); }); // 其他服务配置... }
3. 验证配置生效
完成以上步骤后,重新运行项目,当用户访问无权限的资源时,就会自动跳转到你配置的/Account/AccessDenied页面,而不是出现404错误了。另外要注意:
- 确保页面路径和配置中的
AccessDeniedPath完全一致,Azure等Linux环境是大小写敏感的,这点要留意 - 如果项目使用了Area,需要在路径中加上Area前缀,比如
"/Admin/Account/AccessDenied"
内容的提问来源于stack exchange,提问作者Simone Spagna
相关产品推荐
相关产品推荐

