使用Url.Action时的路由问题:无法生成预期路由
排查ASP.NET MVC路由生成异常问题
首先一眼就能看到一个明显的拼写错误——这大概率是导致你路由生成失败的核心原因:
你的控制器类是PublishedReportWidgetController,但你在Url.Action里写的控制器名称是"PublishedReportsWidget"(多了一个s,把Report写成了Reports)。ASP.NET MVC在解析控制器名称时,会自动去掉后缀的Controller,但拼写错误会让路由系统找不到对应的控制器,自然生成不了正确的URL。
接下来针对你的两个Action重载,给你修正后的调用方式:
1. 无参数的PublishedReports方法
正确的Url.Action调用应该是:
console.log("@(Url.Action(\"PublishedReports\", \"PublishedReportWidget\"))");
这会生成预期的URL:/widgets/published-reports
2. 带publishedReportId参数的重载
如果要生成带参数的路由,需要传入对应的参数值,比如:
console.log("@(Url.Action(\"PublishedReports\", \"PublishedReportWidget\", new { publishedReportId = 123 }))");
这样会生成:/widgets/published-reports/123
额外的验证步骤
如果修正拼写后还是有问题,可以检查这一点:
- 确保你的路由配置中已经启用了属性路由,也就是在
RouteConfig.cs里添加了routes.MapMvcAttributeRoutes();——因为你用了[RoutePrefix]和[Route]属性,必须启用这个配置才能生效。
内容的提问来源于stack exchange,提问作者jonpfl
相关产品推荐
相关产品推荐

