ASP.NET核心-自动在所有控制器中搜索路由



考虑以下路线:

  • /home/about=>控制器=";Home";,动作=";关于">
  • CCD_ 2=>控制器=";Home";,动作=";"隐私">
  • CCD_ 3=>控制器=";账户";,动作=";登录">
  • CCD_ 4=>控制器=";账户";,动作=";寄存器">
  • CCD_ 5=>控制器=";用户";,动作=";配置文件">

我在不同控制器中的操作不会相互重叠,因此我想要这些更容易阅读和使用的路线:

  • /about=>控制器=";Home";,动作=";关于">
  • CCD_ 7=>控制器=";Home";,动作=";"隐私">
  • CCD_ 8=>控制器=";账户";,动作=";登录">
  • CCD_ 9=>控制器=";账户";,动作=";寄存器">
  • CCD_ 10=>控制器=";用户";,动作=";配置文件">

为此,我有一个有效的方法:

app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
"main",
"/",
new { Controller = "Home", Action = "Index" });
endpoints.MapControllerRoute(
"home",
"/{action}/{id?}",
new { Controller = "Home" });
endpoints.MapControllerRoute(
"account",
"/{action}/{id?}",
new { Controller = "Account" });
endpoints.MapControllerRoute(
"user",
"/{action}/{id?}",
new { Controller = "User" });
});

问题是,对于每个控制器,我都必须重复这一点。有没有办法让这个自动的?类似这样的东西:

// look into all controllers and find the first action that matches
endpoints.MapControllerRoute(
"default",
"/{action}/{id?}");

这就是我最终得到的:

我用的不是UseEndpoints,而是

app.MapControllers();

然后,对于每个控制器,我使用了这个属性:

[Route("/[action]/{id?}")]
public class HomeController : Controller
{
//...
}

只有一个动作(对于主页(需要它自己的属性:

[Route("/")]
public IActionResult Index()
{
//...
}