Я использую маршрутизацию на основе атрибутов во всех своих приложениях (все в настоящее время работают с .Net Core 2.2) и часто вкладываю свои контроллеры, чтобы я мог выбирать атрибуты маршрутизации быстро и без использования базы данных.
Для демонстрацииУ меня проблема, у меня три контроллера.Один родительский контроллер - «PhotoSets» позволит пользователю выбрать набор
[Route("photosets")]
public class PhotoSetsController : Controller
{
[HttpGet("")]
public IActionResult Index()
{
return View();
}
}
А затем контроллер «PhotoSet» позволит пользователю просматривать фотографии в наборе
[Route("photosets/{photoSetId:guid}")]
public class PhotoSetController : Controller
{
[HttpGet("")]
public IActionResult Index(Guid photoSetId)
{
return View();
}
}
Тогда есть контроллер «Фото», который облегчает манипулирование самой фотографией
[Route("photosets/{photoSetId:guid}/{photoId:guid}")]
public class PhotoSetController : Controller
{
[HttpGet("")]
public IActionResult Index(Guid photoSetId, Guid photoId)
{
return View();
}
}
В индексном представлении «Фотоэлементы» я использую AnchorTagHelper, чтобы направить пользователя к действию «Индекс» на «Фото»контроллер и указать 'phototId'
<a asp-controller="Photo" asp-action="Index" asp-route-photoId="@photo.Id">
В предыдущих версиях ASP.Net Core я был в состоянии указать параметр совместимости (2.1) и отключить маршрутизацию конечной точки, которая позволила TagHelper собрать недостающиеданные маршрута из того, что я считаю, называют данными маршрута Ambient.Казалось бы, 3.0 и маршрутизация конечной точки больше не поддерживают это и требуют явного объявления маршрута для помощников тегов привязки, помощников URL, перенаправлений и т. Д.
Сейчас мне приходится прибегать к извлечению данных маршрута из ViewContext.для каждой ссылки:
<a asp-action="View" asp-route-photoSetId="@ViewContext.RouteData.Values["photoSetId"]" asp-photoId="@photo.Id">Click here</a>
Я искал высоко и низко и обнаружил, что приведенные ниже четыре ссылки # 11635, кажется, объясняют одно и то же.https://github.com/aspnet/AspNetCore/issues/11635
Пустой href после обновления до ядра asp.net 2.2
https://github.com/aspnet/AspNetCore/issues/12794
Маршрутизация на конечную точку в ASP.NET Core2.2 не работает
Видимо, произошла ошибка, из-за которой при маршрутизации атрибута использовались данные окружающего маршрута для создания URL, который теперь исправлен в 3.0.Есть ли лучший способ сделать это без ручного извлечения RouteData - даже для других действий на том же контроллере?Мне бы очень хотелось, чтобы это поведение вернулось.