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

时间:2018-05-25 12:23:26

标签: asp.net-core asp.net-core-mvc asp.net-core-2.0 asp.net-core-mvc-2.0 asp.net-core-routing

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

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

这适用于一般情况,但我现在想添加一个AdminController,但我希望AdminController上的默认操作是Users,而不是Index。

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

我目前正在使用ASP.Net Core 2.0,意图在发布后立即转向2.1。它目前正在.Net Framework上运行,但我们想要在我们摆脱目前在框架上的一些依赖关系(不太可能是第一个版本)时立即升级到.Net Core。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

请检查以下代码:

routes.MapRoute(         名称:“管理员”,         模板:“{controller} / {action}”,         默认值:new {controller =“Admin”,action =“Users”}     );

答案 1 :(得分:0)

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

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