Я не могу найти способ объединить действие + контроллер + базовый контроллер автоматически , но возможно добиться того, что вы ищете, вот так:
[Route("admin")]
public class AdminController : Controller { }
public class ProductsAdminController : AdminController
{
[Route("products/list")]
public IActionResult Index()
{
...
}
}
Этот подход приводит к генерации URL-адреса /admin/products/list
с очевидным недостатком, что products
- это то, что нужно повторять для каждого действия. Это может быть приемлемым компромиссом; решать вам. Вы могли бы сделать это бит лучше с константой, как это:
private const string RoutePrefix = "products";
[Route(RoutePrefix + "/list")]
public IActionResult Index()
{
...
}
Это не красиво, так как это просто обходной путь, но стоит подумать, если вы не хотите идти с предложением Криса Пратта по районам .