Наследование маршрутизации атрибутов ASP.NET Core MVC - PullRequest
0 голосов
/ 14 сентября 2018

Я всегда использовал этот подход в своих MVC-приложениях до того, как

[Route("admin")]
public class AdminController : Controller
{

}

[Route("products")]
public class ProductsAdminController :AdminController
{ 
    [Route("list")]
    public IActionResult Index()
    {
        ...
    }
}

Url.RouteUrl () для Индекс возвращенное действие / admin / products/ list /

Теперь в .NET Core он игнорирует атрибут маршрута базового класса, и в результате получается просто / products / list / Это новое для .NET Core?Есть ли какая-либо настройка, чтобы система могла объединять действие + контроллер + базовый контроллер маршруты?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Я не могу найти способ объединить действие + контроллер + базовый контроллер автоматически , но возможно добиться того, что вы ищете, вот так:

[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()
{
    ...
}

Это не красиво, так как это просто обходной путь, но стоит подумать, если вы не хотите идти с предложением Криса Пратта по районам .

0 голосов
/ 14 сентября 2018

Насколько я знаю, это никогда бы не сработало.Вы можете использовать area , и, применив атрибут [Area] к базовому контроллеру, вы получите описанный вами результат:

[Area("admin")]
public class AdminController : Controller

[Route("products")]
public class ProductsAdminController : AdminController

То же самое будет работать в Core, так какхорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...