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

.NET Core MVC 7路由配置问题:默认路由sign-in无效,需跳转至account/sign-in

.NET Core MVC 7 默认路由失效与启动跳转问题解决

问题本质

你的Home控制器方法加了[Route("sign-in")]属性路由后,这个方法就不再走传统默认路由的匹配逻辑了——属性路由会完全接管该方法的访问路径,传统路由里指定的action=sign-in是属性路由的路径,不是方法的实际名称(C#方法名不能有连字符,你的方法实际应该叫signin/SignIn),所以框架找不到对应的Action,导致启动404。而换成原方法名signin后,默认路由能匹配到方法(此时这个方法可能没被属性路由覆盖)。

实现启动直接进入/account/sign-in的方案

方案1:修改默认路由的默认值

直接把默认路由的默认控制器和Action指向Account控制器的目标方法:

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

注意:这里的action=SignIn要对应Account控制器里方法的实际名称,如果该方法也加了[Route("sign-in")]属性路由,可将属性路由写成[Route("[controller]/sign-in")],让访问路径统一为/account/sign-in。

方案2:根路径重定向(最直接)

在Program.cs的路由配置后,添加根路径的重定向规则,强制启动时跳转到目标页面:

// 放在MapControllerRoute之后
app.MapGet("/", context => context.Response.Redirect("/account/sign-in"));

这种方式不需要改动原有路由规则,直接将网站根路径(启动默认访问的路径)重定向到/account/sign-in,完全符合需求。

方案3:兼容属性路由与传统路由(针对Home控制器的404问题)

如果要解决Home控制器sign-in路径的404问题,需要明确:属性路由和传统路由不能混用同一个方法。要么去掉[Route("sign-in")],让方法走传统路由(此时默认路由的action=signin能匹配);要么给属性路由加上控制器前缀,让路径更清晰:

[Route("[controller]/sign-in")]
public IActionResult SignIn()
{
    // 方法逻辑
}

这样该方法的访问路径就是/home/sign-in,和传统路由规则兼容,但这和你要的/account/sign-in无关,所以前两个方案更适用。

关键提醒

  • C#方法名不允许包含连字符,所以[Route("sign-in")]只是给方法设置了一个友好的访问路径,和传统路由里的action参数(对应方法名称)完全是两个概念。
  • 属性路由的优先级高于传统路由,只要方法标记了[Route],传统路由就无法再匹配这个方法,只能通过属性路由定义的路径访问。

内容的提问来源于stack exchange,提问作者code-professional

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:43:11