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

ASP.NET Core LoginPath路由错误,如何正确指向/Login?

问题:Cookie身份验证LoginPath路由错误修正

项目Controllers文件夹包含HomeController和LoginController两个控制器,使用Cookie身份验证时将LoginPath设置为/Login,期望路由到LoginController,但点击登录链接时应用却路由到Home/Login,需修正路由实现正确跳转。

当前路由配置

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.MapControllerRoute(
    name: "login",
    pattern: "{controller=Login}/{action=Login}");

LoginPath配置

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
    options.LoginPath = "/Login";
    options.AccessDeniedPath = "/Home/Denied";
});

文件夹结构

Controllers/
├── HomeController.cs
└── LoginController.cs

修正方案

方案1:调整路由规则顺序并修改登录路由的匹配模式

路由匹配按注册顺序执行,需将登录专用路由放在默认路由之前,同时修改路由模式为精确匹配Login,确保/Login路径直接映射到LoginController的Login方法:

// 先注册登录专用路由
app.MapControllerRoute(
    name: "login",
    pattern: "Login",
    defaults: new { controller = "Login", action = "Login" });

// 再注册默认路由
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

方案2:使用属性路由(推荐)

直接在LoginController的Login方法上添加属性路由,无需依赖全局路由配置,更清晰直观:

public class LoginController : Controller
{
    [Route("Login")]
    public IActionResult Login()
    {
        // 登录逻辑
        return View();
    }
}

原理说明

原登录路由的{controller=Login}/{action=Login}模式,实际会匹配类似/Login/Login的路径,而非/Login。当访问/Login时,默认路由会先尝试将Login识别为控制器名称,若LoginController不存在Index方法,路由系统可能出现误匹配;调整路由顺序和模式,或使用属性路由,能确保/Login路径精准指向LoginController的Login方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:43:01