我可以覆盖 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();
}
}
是否可以在不影响其余路由的情况下覆盖单个控制器的默认操作? 我目前有一个默认路由
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();
}
}