Как использовать множественные маршруты в MVC

У меня есть веб-сайт, которому требуется идентификатор отдела для всех сайтов, поэтому я переписал маршрут по умолчанию следующим образом:

routes.MapRoute(
            name: "Main",
            url: "{deptID}/{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", deptID = "", id = UrlParameter.Optional }
        );

Он отлично работает, когда вы, например, используете следующий URL:

http://домен/2/Главная/Индекс

или просто:

http://домен/2

Моя проблема в том, что когда я перехожу к "http://домен/", я получаю сообщение об ошибке, потому что я не указал ИД отдела. Как я могу добавить второй маршрут, который будет срабатывать, когда вы просто заходите в домен.

Я попытался добавить следующее:

routes.MapRoute(
            name: "Start",
            url: "/",
            defaults: new { controller = "Department", action = "Select"}
        );

Что не работает, так как вы не можете просто указать «/» в качестве URL-адреса.

Я также попытался добавить маршрут по умолчанию, а затем просто изменить объект по умолчанию:

            routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Department", action = "Select", id = UrlParameter.Optional }
        );

Это тоже не работает.

Какую ошибку вы получаете в первую очередь? Поскольку вы указали значение по умолчанию для deptID в defaults, вы должны выполнить действие контроллера без ошибок. Опубликуйте свой контроллер и ошибку тогда.

Wiktor Zychla 09.04.2019 13:36

эта ссылка решила вашу проблему: Несколько маршрутов в MVC asp.net

hassan.ef 09.04.2019 13:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
2
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны изменить свой код, как показано ниже

  public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
          name: "Department",
          url: "{deptID}/{controller}/{action}",
          defaults: new { controller = "Department", action = "Index"}
      );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );


    }

Выход

Home URLDepartment URL with ID

Дайте мне знать, если приведенный выше код все еще не работает для вас.

Теперь это не дает мне ошибки, но вызывает HomeController, а не DepartmentController, который я установил в объекте по умолчанию.

Michael Kirkegaard 09.04.2019 13:58

Оно работает. Но, похоже, мне даже не нужны два маршрута. Я могу просто использовать основной маршрут, а затем убедиться, что для действия по умолчанию не требуется параметр DepartmentID.

Michael Kirkegaard 09.04.2019 14:43

Другие вопросы по теме