ASP.NET MVC атрибут маршрутизации не попадает в правильный контроллер - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть пара таких контроллеров:

[RoutePrefix("side-navigation")]
public class SideNavigationController : BaseController
{
    [Route("{pathname}")]
    public ActionResult Index(string pathname)
    {
        SideNavigationPopoutModel model = _sideNavFactory.Value.CreatePopout(pathname);

        if (model != null)
        {
            return View(model);
        }

        return HttpNotFound();
    }
}

public class CatchAllController : BaseController
{
    public ActionResult Index(string pathname)
    {
        CatchAllModel model = _catchAllModelFactory.Value.Create(pathname);

        if (model != null)
        {
            // TODO: Do we need this - what does it do?
            // TempData.Restore(this);

            return View(model);
        }

        return HttpNotFound();
    }
}

Но я не могу получить доступ к своему действию index в боковом навигационном контроллере - если я смотрю на localhost/side-navigation/test, он попадает в контроллер catch allс side-navigation/test в качестве имени пути вместо боковой навигации с test в качестве имени пути.

Кто-нибудь может увидеть, что я здесь что-то не так делаю или как заставить работать контроллер боковой навигации?

Это конфигурация маршрута:

// MVC attribute routing
routes.MapMvcAttributeRoutes();

// Default catch all route
routes.MapRoute(
    "Default",
    "{*pathname}",
    new { controller = "CatchAll", action = "Index" });

Странно, если я изменю маршрут индекса боковой навигации на test/{pathname} и перейду на side-navigation/test/test, он будет работать, и контроллер нажмет, но яне хочу ничего добавлять до пути

Ответы [ 3 ]

0 голосов
/ 30 апреля 2019

Хорошо. Я исправил это, добавив звездочку перед путевым именем:

[RoutePrefix("side-navigation")]
public class SideNavigationController : BaseController
{
    [Route("{*pathname}")]
    public ActionResult Index(string pathname)
    {
    }
}

Если кто-нибудь может объяснить, почему это работает, а без звездочки, это было бы очень признательно, как и яКонтроллер продукта настроен точно так же, как звездочка

.
0 голосов
/ 30 апреля 2019

[RoutePrefix ( "бок-навигация")] открытый класс SideNavigationController: BaseController { [Маршрут ( "{*} путь к файлу")] общедоступный индекс ActionResult (строковый путь) { } }

0 голосов
/ 30 апреля 2019

Похоже, что вы не используете [Area], также поместите атрибут [Route ("[action]")] выше метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...