如何修改[Authorized]特性默认跳转的/Account/Login为自定义登录路径
解决方案
根据你使用的ASP.NET Core版本不同,可以通过以下几种方式修改未授权访问的重定向登录路径:
1. ASP.NET Core 6+(Program.cs 顶层语句配置)
如果你使用的是Cookie身份认证(最常用的场景),直接在添加Cookie认证的配置块里修改LoginPath属性即可,示例代码如下:
var builder = WebApplication.CreateBuilder(args); // 添加身份认证服务 builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { // 这里修改为你自定义的登录页路径 options.LoginPath = "/auth/login"; // 可选:同步修改无权限访问时的跳转路径 options.AccessDeniedPath = "/auth/accessdenied"; }); // 后续其他服务注册... var app = builder.Build(); // 注意要保证中间件顺序:先UseAuthentication,再UseAuthorization app.UseAuthentication(); app.UseAuthorization(); // 其他中间件配置... app.Run();
2. ASP.NET Core 3.1 / 5(Startup.cs 配置)
修改ConfigureServices方法里的Cookie认证配置即可:
public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.LoginPath = new PathString("/auth/login"); options.AccessDeniedPath = new PathString("/auth/accessdenied"); }); // 其他服务配置 } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 同样要保证中间件顺序正确 app.UseAuthentication(); app.UseAuthorization(); // 其他中间件配置 }
3. 如果你使用了ASP.NET Identity脚手架
如果是基于Identity的项目,你需要在添加Identity的配置后追加Cookie配置,示例如下(以ASP.NET Core 6+为例):
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<ApplicationDbContext>(); // 追加覆盖Identity默认的Cookie配置 builder.Services.ConfigureApplicationCookie(options => { options.LoginPath = "/auth/login"; options.AccessDeniedPath = "/auth/accessdenied"; });
验证效果
配置完成后重启项目,再次访问加了[Authorize]特性的客户端页面,未登录时就会自动跳转到你配置的/auth/login路径,不会再走默认的/Account/Login路径。
内容的提问来源于stack exchange,提问作者alexsey bobrovitch
相关产品推荐
相关产品推荐

