ASP.NET Core 3.1 修改默认登录路径后如何禁止访问原/Login路径
解决方案
你配置的LoginPath仅用于指定未授权访问受保护资源时的自动跳转路径,本身不会自动禁用原有/Login路由的访问权限,需要额外配置实现禁用需求。
方案1:直接修改Login控制器的路由映射(推荐)
给Login控制器类加上路由特性,直接将控制器的访问路径绑定到/e-tol/Login,原有/Login路径会自动失效:
// 在LoginController类上添加该特性 [Route("e-tol/[controller]")] public class LoginController : Controller { // 原有动作方法无需修改 }
如果用的是传统全局路由配置,修改Program.cs里的路由规则,将Login控制器的匹配路径调整为e-tol/Login即可。
方案2:在登录页动作中添加路径校验
如果不想修改控制器路由,可以直接在现有的Index动作开头加路径校验逻辑,拦截非法路径访问:
public async Task<IActionResult> Index(string message) { // 新增路径校验逻辑 if (Request.Path.StartsWithSegments("/Login", StringComparison.OrdinalIgnoreCase)) { // 可选择返回404 return NotFound(); // 也可以选择直接重定向到正确的登录路径 // return Redirect("/e-tol/Login"); } ViewBag.Message = message; if (HttpContext.User.Identity.IsAuthenticated) return RedirectAfterAuthenticated(); await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); return View(); }
额外需修改的逻辑
你现有代码的RedirectAfterAuthenticated方法中,角色为null时的跳转逻辑还指向旧的Login路由,需要同步修改:
switch (role) { case null: // 修改为正确的登录路径 return Redirect("/e-tol/Login"); default: return RedirectToAction("Index", "Home"); }
内容的提问来源于stack exchange,提问作者Himawan Sandhi
相关产品推荐
相关产品推荐

