Как обойти «Параметр catch-all может отображаться только как последний сегмент шаблона маршрута». - PullRequest
0 голосов
/ 16 февраля 2019

Если у меня есть контроллер с методом действия, который использует маршрутизацию на основе атрибутов, и объявляю его следующим образом, все хорошо:

    [HttpGet]
    [Route("/dev/info/{*somevalue}")]
    public IActionResult Get(string somevalue) {

        return View();
    }

Я могу перенаправить на вышеуказанный метод действия, например, указав URLкоторый заканчивается на /dev/info/hello-world или /dev/info/new-world

Однако мое бизнес-требование состоит в том, чтобы URL-адреса выглядели следующим образом: /dev/hello-world/info или /dev/new-world/info И существует бесконечный набор таких URL-адресов, которые все должныМаршрут к тому же методу действия на контроллере.

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

    [HttpGet]
    [Route("/dev/{*somevalue}/info/")]
    public IActionResult Get(string somevalue) {

        return View();
    }

Но когда я это делаю, я получаю следующееошибка при запуске веб-проекта:

Произошло необработанное исключение при обработке запроса.RouteCreationException: Следующие ошибки произошли с информацией о маршрутизации атрибута:

Для действия: 'App.SomeController.Get (1-wwwSomeProject)' Ошибка: Параметр перехвата может отображаться только как последний сегмент шаблона маршрута.,Имя параметра: routeTemplate Microsoft.AspNetCore.Mvc.Internal.AttributeRoute.GetRouteInfos (действия IReadOnlyList)

Должен быть какой-то способ обойти эту ошибку.Знаешь способ?

...