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

ASP.NET Core中Url.Action生成链接跳转错误,访问SubmitCart跳转到GetItemsInCart

问题排查方案

按优先级逐一排查即可定位原因:

  1. 确认属性路由已启用
    你在Action上标记的[Route]属于属性路由范畴,但当前的MVC配置只注册了约定路由,没有开启属性路由支持,需要补充配置:
app.UseMvc(routes =>
{
    routes.MapMvcAttributeRoutes(); // 新增这行启用属性路由
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

未启用属性路由时,你标记的[Route("SubmitCart")]不会生效,路由系统只会走默认约定规则匹配请求。
2. 检查路由模板冲突
如果已经启用了属性路由,需要确认路由模板配置是否合理:

  • 如果ShoppingCart控制器没有加[Route("[controller]")]前缀特性,那么Action上的[Route("SubmitCart")]对应的访问路径是根路径下的/SubmitCart,而非/ShoppingCart/SubmitCart
  • 如果控制器加了前缀路由,检查两个Action的路由模板是否存在模糊匹配,比如是否使用通配符、可选参数导致SubmitCart的路由被GetItemsInCart的路由提前匹配到
  1. 检查Action的动词约束
    如果SubmitCart方法上加了[HttpPost]、[AcceptVerbs("POST")]等特性,你通过锚点点击、地址栏直接输入发起的都是GET请求,无法匹配到SubmitCart,路由系统会继续匹配同控制器下其他支持GET请求的Action,就可能落到GetItemsInCart上。
  2. 验证请求是否进入SubmitCart方法
    在SubmitCart方法第一行加断点调试:
  • 如果断点没有命中,说明路由匹配阶段就匹配到了其他Action,建议开启路由日志查看匹配过程:在appsettings.json中配置日志级别
{
  "Logging": {
    "LogLevel": {
      "Microsoft.AspNetCore.Routing": "Debug"
    }
  }
}

运行后查看控制台的路由匹配日志,就能明确看到请求被匹配到了哪个Action以及匹配原因

  • 如果断点命中,说明是方法内部或者后续中间件做了重定向,检查RedirectToAction("ViewReceipt")对应的ViewReceipt方法是否存在,或者ViewReceipt内部有没有重定向到GetItemsInCart的逻辑
  1. 检查全局重定向规则
    确认是否配置了URL重写中间件、授权重定向规则:比如SubmitCart上加了[Authorize]特性,未登录时会被身份验证中间件重定向到其他地址,刚好重定向逻辑最后落到了GetItemsInCart上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 05:33:03