маршрутизация и контроллеры .net core mvc

#asp.net-core-mvc

#asp.net-core-mvc

Вопрос:

Итак, я совершенно новичок в .net. Прямо сейчас я изучаю .net Core. Я пытаюсь разобраться с маршрутизацией. Кажется, я не могу заставить маршрутизацию искать ни в одной папке, кроме Home и Shared. Я просмотрел весь Интернет и перепробовал множество вещей. Кажется, мне чего-то не хватает. Вот что я получил

  app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "test", 
                    template: "Register/test",
                    defaults: new { controller = "Register", action = "test"}
                    );

                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");


            });
  

У меня есть папка Register с файлом test.cshtml, просто чтобы попытаться разобраться в этой маршрутизации. И это находится в моем файле HomeController.cs

         public IActionResult test()
        {
            return View();
        }
  

на моей странице _Layout у меня есть эта ссылка

   <li><a asp-area="" asp-controller="Register" asp-action="test">Test</a></li>
  

Он отлично работает, когда я помещаю его в домашнюю папку, но я хочу, чтобы все было по отдельности. Я знаю, что мне чего-то не хватает. Я просмотрел все виды статей в Интернете, включая Stack Overflow, и я просто не понимаю, чего мне не хватает. Из того, что я прочитал, предполагается, что это похоже на родительскую папку / Файл / then и идентификатор, который может быть прикреплен к ней, например, имя пользователя. Я пробовал другие форматы маршрутизации, но безуспешно, это была только моя последняя попытка. Я просто не могу не думать, что мне нужен какой-то фрагмент кода где-то еще.

Комментарии:

1. Извините! С какой реальной проблемой вы столкнулись? Каково ваше ожидаемое поведение?

2. Добавление маршрутов в панель навигации прямо сейчас, потому что это, кажется, самый простой пример маршрутизации, но, я думаю, не для меня. В принципе, ссылка должна вести на тестовую страницу в папке Register.

3. Что ж, я заставил это работать. Не уверен, что я сделал иначе, чем то, что я пробовал раньше. Что на самом деле не помогает мне лучше это понять. Но теперь, когда у меня все заработало, возможно, я смогу проанализировать это лучше, чтобы увидеть.

Ответ №1:

Из вашего вопроса похоже, что у вас есть следующий код в вашем HomeController .

 public IActionResult test()
{
    return View();
}
  

Это на самом деле относится к вашему RegisterController , потому что определенный вами шаблон маршрута является явным захватом со значениями по умолчанию для контроллера «Register» и действия «test».

Представление с именем «test.cshtml», которое следует называть так из-за соглашения по умолчанию, должно находиться в вашей ViewsRegister папке, по соседству с ViewsHome .

Есть несколько причин, по которым это могло каким-то образом сработать. Во-первых, представление доступно для обнаружения для любого контроллера, если он находится в общем доступе. Не зная больше о запросах, которые вы пробовали, трудно определить, была ли маршрутизация запущена на первом маршруте или на втором, но если бы этот метод действительно применялся к HomeController запросам в / home / test, он бы сработал.

Мне кажется, что вы изучаете маршрутизацию. Это здорово — я на 100% поощряю эксперименты — при условии, что вы знаете, что маршрутизация не обязательно является самым бесполезным занятием для изучения. Это также то, к чему вам не следует прикасаться в 93,7% случаев. Например, маршрут, о котором вы определили, не потребуется для контроллера и действия, которые вы добавляете с помощью RegisterController и test .

Приветствия.