2008-11-25 2 views
2

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

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

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

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

но когда вставка адрес пользователя что-то вроде/один/два/три/четыре/ли/л будет кэшированными с отображением неоднородного.

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

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

+0

Считайте это? – yaegerbomb 2012-06-14 20:44:56

ответ

0

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

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

0

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

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

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

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