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


person FoffySkrimshaw    schedule 20.10.2016    source источник
comment
Извините ! Какова реальная проблема, с которой вы столкнулись? Каково ваше ожидаемое поведение?   -  person Shyju    schedule 20.10.2016
comment
Добавление маршрутов на панель навигации прямо сейчас, потому что это кажется самым простым примером маршрутизации, но, думаю, не для меня. В основном ссылка должна вести на тестовую страницу в папке «Регистрация».   -  person FoffySkrimshaw    schedule 20.10.2016
comment
Ну, я заставил его работать. Не уверен, что я сделал иначе, чем то, что я пробовал раньше. Что на самом деле не помогает мне понять это лучше. Но теперь, когда я заработал, может быть, я смогу разобрать его лучше, чтобы увидеть.   -  person FoffySkrimshaw    schedule 20.10.2016


Ответы (1)


Судя по вашему вопросу, у вас есть следующий код в файле HomeController.

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

На самом деле это относится к вашему RegisterController, потому что определенный вами шаблон маршрута представляет собой явный захват со значениями по умолчанию для контроллера «Регистрация» и действия «тест».

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

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

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

Ваше здоровье.

person MisterJames    schedule 20.10.2016