Прежде чем я начну, я знаю, что есть похожие вопросы, но все они касаются использования слешей с параметрами в маршрутах, чего я не пытаюсь достичь (по крайней мере, пока).
Я создаю веб-приложение ASP.NET Core 2 MVC и у меня возникают проблемы с косыми чертами в маршрутах, которые экранируются при создании ссылок на мои действия.У меня есть следующий контроллер:
[Route("Manage/Account")]
public class AccountsController : Controller
{
[Route("[Action]")]
public IActionResult Index() => View();
[Route("[Action]")]
public IActionResult Other() => View();
}
И следующие ссылки в представлении:
<a asp-controller="Manage/Accounts" asp-action="Index">Accounts</a>
<a asp-controller="Manage/Account" asp-action="Other">Accounts (Other)</a>
Это генерирует следующий HTML:
<a href="/Manage%5CAccount">Accounts</a>
<a href="/Manage%5CAccount/Other">Accounts (Other)</a>
Обратите внимание, чтоСлэш был экранирован до %5C
, что, честно говоря, работает, и ссылки фактически приводят меня к правильным действиям.Кроме того, ручная установка обратной косой черты через адресную строку браузера также приводит меня к правильным действиям.Однако это дает мне несколько уродливых URL-адресов, которых я бы предпочел не иметь.
Может кто-нибудь предложить способ не дать ему избежать моих слешей?
Редактировать: Подробнее
В моих попытках довести мою проблему до минимума, я боюсь, что мог упустить какой-то важный контекст относительно моей конечной цели.
Я пытаюсь реализовать настройку папок функций, которую я успешно использовал с ASP.NET MVC5, которая использует маршрутизацию атрибутов и механизм пользовательского представления, чтобы разрешить вложенные функции.Для этой работы я использовал [RoutePrefix(...)]
.Контроллер, приведенный ниже, будет находиться в следующем каталоге ~/Features/Manage/Accounts
:
[RoutePrefix("Manage/Accounts")]
public class Accounts : Controller
{
[Route("Index")]
public ActionResult Index() => View();
[Route("Other")]
public ActionResult Other() => View();
}
Затем ссылки добавляются в представлениях, подобных этому:
@Html.ActionLink("Accounts", "Index", "Manage/Accounts")
@Html.ActionLink("Accounts (Other)", "Other", "Manage/Accounts")
, который затем отображается как:
<a href="/Manage/Accounts">Accounts</a>
<a href="/Manage/Accounts/Other">Accounts (Other)</a>
К сожалению, атрибут [RoutePrefix(...)]
недоступен в ASP.NET Core MVC, и может показаться, что использование стандартного атрибута [Route(...)]
не может эмулировать поведение, обнаруженное в MVC5.