#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
.
Приветствия.