ASP.NET Core MVC:默认Action的RedirectToRoute未在URL中包含Action
结论:这是ASP.NET Core的预期行为,不是Bug
你遇到的差异是ASP.NET Core路由系统和传统.NET MVC在URL生成逻辑上的设计区别,而非框架Bug。
原因解析
ASP.NET Core的URL生成器会优先生成最简洁的符合路由规则的URL:
- 你的默认路由配置中,
action的默认值是Index - 当调用
RedirectToAction("Index", "Controller2")时,路由系统判断Controller2加上默认action=Index完全匹配路由规则,因此会省略默认的Index,生成/Controller2而非/Controller2/Index - 跳转非默认Action时,因为没有对应的默认值可以省略,所以会完整生成包含Action名称的URL
而传统.NET MVC的URL生成逻辑不会自动省略默认Action参数,因此会保留/Controller2/Index格式。
解决AJAX路径问题的方案
因为简洁URL导致相对路径的AJAX请求出错,你可以通过以下两种方式处理:
1. 修改路由配置,强制保留默认Action名称
在默认路由的dataTokens中添加SuppressLinkGenerationForDefaultValues = false,关闭默认值的省略逻辑:
app.MapControllerRoute( name: "default", pattern: "{controller}/{action}/{id?}", defaults: new { controller = "Controller1", action = "Index" }, dataTokens: new { SuppressLinkGenerationForDefaultValues = false });
修改后,生成的重定向URL会变成/Controller2/Index,AJAX的相对路径就能正确指向目标。
2. 规范AJAX请求的路径生成
在前端或后端生成AJAX请求路径时,使用绝对路径或基于应用根目录的路径,避免依赖相对路径:
- 后端生成路径:使用
Url.Action("TargetAction", "Controller2")获取正确的完整路径,传递给前端 - 前端路径:直接使用
"/PathToMyApp/Controller2/action"或基于window.location.origin构造绝对路径
内容的提问来源于stack exchange,提问作者Aaron Newman
相关产品推荐
相关产品推荐

