Действия навигации дублируются в ссылках href?

#c# #.net #asp.net-mvc #asp.net-core

#c# #.net #asp.net-mvc #asp.net-ядро

Вопрос:

У меня есть веб-приложение .Net 3.1 core со следующей разметкой, которую я использую в качестве навигации:

                         <ul class="navbar-nav flex-grow-1">
                            <li class="nav-item">
                                <a class="nav-link text-white" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link text-white" asp-area="" asp-controller="About" asp-action="About">About</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link text-white" asp-area="" asp-controller="Students" asp-action="Students">Students</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link text-white" asp-area="" asp-controller="Courses" asp-action="Courses">Courses</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link text-white" asp-area="" asp-controller="Instructors" asp-action="Instructors">Instructors</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link text-white" asp-area="" asp-controller="Departments" asp-action="Departments">Departments</a>
                            </li>
    
                        </ul>

  

Однако, когда я запускаю приложение с помощью кнопки «Пуск», URL-адреса hrefs содержат действия, перечисленные дважды, например

 
                        <li class="nav-item">
                            <a class="nav-link text-white" href="/About/About">About</a>
                        </li>
                        
  

вместо

 
                        <li class="nav-item">
                            <a class="nav-link text-white" href="/About">About</a>
                        </li>
                        
  

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

Спасибо,

Роберт

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

1. Вы установили asp-controller и asp-action то же самое. Я думаю, все ваши действия HomeController включены, тогда все asp-controller должно быть дома.

Ответ №1:

Как указал @gidanmx2, по умолчанию маршруты похожи controller/action .

На ваш взгляд, вы установили и контроллер, и действие одинаково.

 <a class="nav-link text-white" asp-area="" asp-controller="About" asp-action="About">About</a>
  

Вот почему у вас есть эта ссылка About / About.

Я предполагаю, что вы не создали один контроллер для каждого своего действия, поэтому установите правильный контроллер asp-controller , и все должно быть в порядке. Возможно Home ?

Ответ №2:

По умолчанию маршруты определяются в Startup.cs, как вы можете видеть, есть действие по умолчанию с именем «Index», если вы переименуете свое действие «About» в «Index», тогда ваша ссылка будет «/ About»

 app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
  

Вы также можете украсить действие Route атрибутом, чтобы определить пользовательский маршрут.

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

1. Спасибо, Гидан, ты попал в точку!