Маршрут по умолчанию для всех экстремальных ситуаций - PullRequest
2 голосов
/ 25 ноября 2008

В моей маршрутизации я хотел бы иметь что-то вроде не найденного обработчика маршрута.

Например, я создал одно отображение как

routes.MapRoute(
                     "default",
                     "{controller}/{action}/{id}",
                     new { controller = "Home", action = "Index", id="" }
             );

routes.MapRoute(
                     "Catchall",
                     "{*catchall}",
                     new { controller = "Home", action = "Lost" }
             );

но когда пользователь вставляет адрес что-то вроде / one / two / three / four / bla / bla, он будет кэшироваться с помощью отображения Catchall.

Но когда пользователь вставляет что-то, что должно соответствовать сопоставлению по умолчанию, (вроде / one / two /, но этот контроллер или действие не реализовано) Я хотел бы, чтобы отображение Catchall приняло этот запрос, потому что все другие сопоставления не удалось. Но вместо этого я получаю ошибку.

Должен ли я переопределить некоторые обработчики сопоставления, чтобы перехватить исключение, если контроллер или действие получили исключение?

Ответы [ 2 ]

0 голосов
/ 25 ноября 2008

Я не думаю, что это лучшее решение, но вы всегда можете быть более точными в своих маршрутах:

routes.MapRoute(
    "home and action",
    "home/index/{id}",
    new { controller = "Home", action = "Index", id="" }
);

... повторите для остальных ваших действий ...

routes.MapRoute(
    "article catch all",
    "home/{article}",
    new { controller = "Home", action = "ArticleSearcher", article="" }
);

Это попытается сопоставить прямое действие, и если действие не будет найдено, передать то, что обычно является частью {действия} маршрута по умолчанию, действию 'ArticleSearcher' в качестве параметра строки статьи.

Недостатком является необходимость явно создавать каждый маршрут контроллера / действия.

0 голосов
/ 25 ноября 2008

Проблема здесь в том, что Маршрут не несет ответственности за то, чтобы "один / два" отображался в файл . Эта ответственность ложится на ViewEngine. Поскольку «один / два» является действительным маршрутом , он будет выбран.

Если вы хотите обработать ошибку неверного маршрута, я бы порекомендовал вам просто использовать встроенную «страницу» ErrorHandling для отображения любого сообщения, которое вы сделали бы в Catchall.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...