Различные URL-адреса одного и того же контроллера ASP MVC Core - PullRequest
0 голосов
/ 05 июня 2018

Мне нужно сгенерировать навигацию, в которой есть «Система» и «Категория», архонты или кнопки.Система и категория используют один и тот же контроллер.Я хотел бы использовать [Route()] вместо Startup файла для маршрутизации.

Для категории Archon прекрасно работает:

<a asp-area="Admin" asp-controller="@value.Controller" asp-action="@Constants.Route.List" asp-route-valueId="@value.ValueId">@value.Value</a>

, но я не знаю, как использовать тот же контроллер для'admin / system / list' вместо admin / categorytype / list, пока я пробовал:

1)

<a asp-area="Admin" asp-route="System" asp-action="@Constants.Route.List" asp-route-valueId="@value.ValueId">@value.Value</a>

2)

<a asp-route="Admin/System/List" asp-route-valueId="@value.ValueId">@value.Value</a>

и на контроллере

[Area("Admin")]
[Route("Admin/[controller]")]
[Route("Admin/System")]
[Authorize]
public class CategoryTypeController : Controller {}
    [Route("[action]")]
    public ViewResult List(int valueId) {}

3)

<a href="@Url.RouteUrl("SystemValue", new { valueId = value.ValueId })">@value.Value</a>

и наконтроллер

[Area("Admin")]
[Route("Admin/[controller]")]
[Route("Admin/System", Name = "SystemValue")]
[Authorize]
public class CategoryTypeController : Controller {}
    [Route("[action]")]
    public ViewResult List(int valueId) {}

ни один из вышеперечисленных маршрутов не сгенерировал URL, который позволяет мне перейти к контроллеру CategoryType и действиям List с помощью / admin / system / list

У меня также есть app.UseMvcWithDefaultRoute(); в Startup файле.

Редактировать: Когда я ввожу адрес вручную /admin/system/list - роутер работает, но я не могу сгенерировать такой URL-адрес для кнопки или архона, чтобы соответствовать/admin/system/list

, как на прилагаемой картинке, у архона нет URL screenshot of the browser

РЕДАКТИРОВАТЬ: Я нашелрешение, но я не доволен этим, получается, что я делаюне понимаю, как работает маршрутизация.Для меня атрибут [Route ()] - это один из способов определения маршрутов, а app.UseMvc() - второй.Мне пришлось определять маршруты в двух местах.

в Startup.cs

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "SystemValue",
            template: "Admin/System/List/{id?}",
            defaults: new { area = "Admin", controller = "CategoryType", action = "List" });
    });

контроллер

[Area("Admin")]
[Route("Admin/[controller]")]
[Route("Admin/System", Name = "SystemValue")]
[Authorize]
public class CategoryTypeController : Controller
{}
    [Route("[action]")]
    public ViewResult List(int valueId) {}

view

<a href="@Url.RouteUrl("SystemValue", new { valueId = value.ValueId})">@value.Value</a>

Я все еще буду искать решение, как это сделать, используя только [Route ("")]

1 Ответ

0 голосов
/ 05 июня 2018

Если вы хотите указать маршруты по отдельности, вы можете использовать именованные маршруты, но это необходимо указать в методе, а не в контроллере.

[Route("/admin/system/list/{id}",name ="SystemList")]
[Route("/admin/category/list/{id}",name ="CategoryList")]
public IActionResult List(int id)
{
...
}

вы можете сгенерировать URL для этогоroute as

<a asp-route="CategoryList" asp-route-id="@value.ValueId">@value.Value</a>

Система маршрутов может использовать маршруты, объявленные при запуске, или использовать маршруты, объявленные атрибутами, но они не смешиваются, когда вы задаете атрибут маршрута на уровне контроллера, маршруты из запуска запускаются.игнорироваться.

...