ASP.NET Core 5 MVC项目如何修改路由去掉URL中的控制器前缀?
可行解决方案
方案1:为目标Action添加特性路由(推荐,影响范围最小)
直接在MoneyController中对应short_form的Action方法上添加[Route]特性,直接指定路由路径:
using Microsoft.AspNetCore.Mvc; public class MoneyController : Controller { // 直接指定路由为根路径下的short_form [Route("short_form")] public IActionResult short_form() { // 原有业务逻辑不变 return View(); } }
注:如果你的控制器类上已经加了[Route]/[ApiController]等前缀特性,需要去掉控制器级别的路由前缀,或者调整Action的Route特性写法避免拼接前缀
方案2:添加全局专属路由规则
不需要修改控制器代码,直接在路由配置中添加一条匹配规则,把short_form路径直接映射到Money控制器的对应Action。
如果是ASP.NET Core 5 带Startup.cs的项目,修改Startup.cs的Configure方法中的路由配置:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其他中间件配置不变... app.UseEndpoints(endpoints => { // 新增这条专属路由,要放在默认路由规则前面,优先级更高 endpoints.MapControllerRoute( name: "ShortFormSpecialRoute", pattern: "short_form", defaults: new { controller = "Money", action = "short_form" } ); // 原有默认路由保留 endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); }
方案3:为整个Money控制器去掉路由前缀(适合该控制器所有Action都需要省略控制器名的场景)
如果Money控制器下的所有Action都需要直接用Action名作为路由路径,可以直接给控制器类添加路由特性:
[Route("[action]")] public class MoneyController : Controller { // 路由自动变为 /short_form public IActionResult short_form() { return View(); } // 其他Action路由也会自动变为 /Action名,比如/other_action public IActionResult other_action() { return View(); } }
注意:该方案需要确保Money控制器下的所有Action名称不会和其他控制器的Action名称、静态资源路径冲突,否则会出现路由匹配异常
内容的提问来源于stack exchange,提问作者Munir Ahmad
相关产品推荐
相关产品推荐

