Поймать все маршруты не работают с помощью регулярного выражения - PullRequest
0 голосов
/ 02 декабря 2009

Я знаю, что первый маршрут поймает большинство путей. Однако, это также поймает / Product / Edit / blablabla (я использую отладчик маршрутизации ASP.NET):

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

        routes.MapRoute(
            "Default", 
            "{controller}/{action}/{id}",                          
            new { controller = "Home", action = "Index", id = @"\d{1,}" }
        );

        routes.MapRoute(
            "Catch All",
            "{*path}",
            new { controller = "Error", action = "NotFound" }
        );
    }

Но это неправильно! Зачем? Если целое число не меньше 1 длины, первый маршрут не должен совпадать. Мне нужно также обработать не найденный coutroller и action ... есть идеи?

Большое спасибо!

Ответы [ 3 ]

8 голосов
/ 02 декабря 2009

Вы должны поместить выражение в четвертый параметр. Читать это:

http://www.asp.net/LEARN/MVC/tutorial-24-cs.aspx

Листинг 3.

routes.MapRoute(
    "Product",
    "Product/{productId}",
    new {controller="Product", action="Details"},
    new {productId = @"\d+" }
 );

Регулярное выражение \ d + соответствует одно или несколько целых чисел. Это ограничение приводит к совпадению маршрута продукта следующие URL:

  • / Продукт / 3
  • / Продукт / 8999

Но не следующие URL:

  • / Продукт / яблоко
  • / Продукт


Эти запросы браузера будут обрабатывается другим маршрутом или, если нет соответствующих маршрутов, ресурс не найден будет возвращена ошибка.

0 голосов
/ 02 декабря 2009

Редактировать: решено.

[HandleError]

передаст (автоматически) объект исключения в представление Error.aspx, которое отображает внутреннее сообщение.

<customErrors mode="On" defaultRedirect="/Error/NotFound" />

вызовет ErrorControllerметод "NotFound", который отображает (статический) aspx View.

0 голосов
/ 02 декабря 2009

Вы неправильно понимаете метод расширения MapRoute.

Третий параметр - это набор значений по умолчанию для параметров маршрута.

В вашем случае вы говорите, что значением по умолчанию для параметра id является \d{1,}.

...