URL маршрута в том числе? = - PullRequest
0 голосов
/ 26 февраля 2020

Я использую следующую бритву на своей странице:

<a asp-action="Logs" asp-route-channel="@channel.Name">
     <button class="btn btn-success btn-circle"><i class="fa fa-eye"></i></button>
</a>

channel - это строка, а не целое число, поэтому я не использую id.

И вот как я это маршрутизирую:

endpoints.MapControllerRoute("logs", "Dashboard/Logs/{channel}");

И в моем контроллере я просто делаю это для целей тестирования:

public IActionResult Logs(string channel)
{
    return Content(channel);
}

Однако, когда ссылка генерируется, я получаю что-то вроде этого:

<a href="/Dashboard/Logs?channel=mychannel">

Вместо ожидаемого:

<a href="/Dashboard/Logs/mychannel">

РЕДАКТИРОВАТЬ

Вот что Я пробовал:

[HttpGet("{channel}")]
public IActionResult Logs(string channel)
{
    return Content(channel);
}

Что приводит к https://localhost:44351/mychannel

Я также пробовал:

[HttpGet("Dashboard/Logs/{channel}")]
public IActionResult Logs(string channel)
{
    return Content(channel);
}

Что работает, как задумано, но почему я должен должен включать весь путь, как это?

1 Ответ

0 голосов
/ 26 февраля 2020

Вы отображаете маршрут по умолчанию, основанный на соглашении, который, скорее всего, будет иметь {id} в качестве параметра маршрута. Поскольку он соответствует значению по умолчанию, и вы включили {channel}, он добавит этот параметр в виде строки запроса вместо части URL.

Чтобы получить действие, вам нужно будет указать собственный маршрут для этого действия. желаемое создание URL.

endpoints.MapControllerRoute(
    name: "Logs",
    pattern: "Dashboard/Logs/{channel}",
    defaults: new { controller = "Dashboard", action = "Logs" });

endpoints.MapControllerRoute(
    name: "default",
    pattern: "{controller}/{action}/{id?}",
    defaults: new { controller = "Home", action = "Index" });

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

<a asp-controller="Dashboard" asp-action="Logs" asp-route-channel="@channel.Name">
     <button class="btn btn-success btn-circle"><i class="fa fa-eye"></i></button>
</a>
...