Неработающие ссылки после обновления до ASP.Net Core 3.0 - PullRequest
1 голос
/ 27 сентября 2019

Я использую маршрутизацию на основе атрибутов во всех своих приложениях (все в настоящее время работают с .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 - даже для других действий на том же контроллере?Мне бы очень хотелось, чтобы это поведение вернулось.

...