Как использовать многогранные маршруты в MVC - PullRequest
3 голосов
/ 09 апреля 2019

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

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

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

http://domain/2/Home/Index

или просто:

http://domain/2

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

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

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 }
        );

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

1 Ответ

1 голос
/ 09 апреля 2019

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

  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 URL Department URL with ID

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

...