我可以覆盖 ASP.Net Core MVC 中单个控制器的默认操作吗

Can I override the default action for a single controller in ASP.Net Core MVC

是否可以在不影响其余路由的情况下覆盖单个控制器的默认操作? 我目前有一个默认路由

routes.MapRoute(
    name: "Default",
    template: "{controller}/{action}",
    defaults: new { controller = "Book", action = "Index" }
);

这在一般情况下有效,但我现在想添加一个 AdminController,但我希望 AdminController 上的默认操作是用户,而不是索引。

我真的不想在此控制器上使用属性路由,因为我们稍后可能会更新默认路由,我想尽可能保持集中和 DRY。我只希望 url /Admin 和 /Admin/Users 路由到这个控制器中的用户操作。

我目前正在使用 ASP.Net Core 2.0,打算在它发布后立即转移到 2.1。它目前 运行 在 .Net Framework 上,但我们希望尽快升级到 .Net Core,一旦我们可以摆脱我们目前对框架的一些依赖(不太可能是第一个版本)。

有什么建议吗?

请检查以下代码:

routes.MapRoute( 姓名:"Admin", 模板:“{controller}/{action}”, 默认值:新{控制器="Admin",动作="Users"} );

虽然比使用属性路由更密集,但您可以做到

routes.MapRoute( 
    name: "AdminDefault", 
    template: "Admin/{action}", 
    defaults: new { controller = "Admin", action = "Users" }
);

routes.MapRoute(
    name: "Default",
    template: "{controller=Book}/{action=Index}",        
);

在控制器上使用属性路由

[Route("[controller]")]
public class AdminController : Controller {    
    [HttpGet]
    [Route("")]             //Match GET admin
    [Route("[action]")]     //Match Get admin/users
    public IActionResult Users() {
        return View();    
    }    
}

甚至

[Route("[controller]/{action=Users}")]
public class AdminController : Controller {    
    [HttpGet]
    public IActionResult Users() {
        return View();    
    }    
}

引用Routing to Controller Actions in ASP.NET Core