Как работают ASP.NET MVC Routes? - PullRequest
7 голосов
/ 13 марта 2010

У меня определен следующий маршрут:

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

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

    // Added custom route here!
    routes.MapRoute(
        "CatchAll", 
        "{*catchall}," 
        new { controller = "Error", action = "NotFound" }
    );
}

ничего нового - это метод ASP.NET MVC1 RegisterRoutes по умолчанию с добавлением одного пользовательского маршрута.

Теперь, если я пойду на следующий URL, я получу 404 ...

http://whatever/Home/MissingActionMethod

Так что в 1011 * нет ActionMethod, называемого MissingActionMethod. Итак, означает ли это, что если я пойду на 1-й маршрут, определенный выше, и не смогу найти действие ... тогда я вернусь и попробую второй маршрут? ополаскивания повторить?

Или, как только я сопоставлю маршрут, я тогда попробую и выполню этот маршрут ... и если я потерплю неудачу (то есть, обнаружу, что действие отсутствует) .. тогда .. неудача? boomski

ура!

EDIT / UPDATE:

Спасибо огромное за ответы, но они не читают мой вопрос должным образом :( Я знаю 1) важен порядок маршрутов б) отладчик маршрута haack

но мой вопрос не об этом. Я спрашиваю, что ... если первый маршрут "обработан" ... но не удается ... он затем идет вниз по списку к следующему?

Итак, в моем примере выше. Первый маршрут с именем «По умолчанию» сопоставляется с запрошенным URL / ресурсом ... но когда платформа пытается найти действие, которое отсутствует ... это 404.

Итак ... означает ли это, что фреймворк сначала совпадает с маршрутом "по умолчанию" ... пробует его ... не удается ... возвращается назад к списку маршрутов .. пытается найти следующий маршрут, который соответствует. и, наконец, терпит неудачу, так что потом сдается?

Или он находит только первый и единственный первый маршрут, которому он соответствует ... и если ему не удается найти контроллер и / или действие ... тогда он просто сдается там и тогда? (Это то, что я подозреваю). И если да .. то как тогда понять, как на 404?

Обновление № 2:

Фил Хаак фактически говорит о моем вопросе , немного ... но не отвечает на ту часть, которая мне была интересна -> как и где он определяет ресурс 404, не найденный.

Ответы [ 3 ]

2 голосов
/ 13 марта 2010

Маршруты! = Действия.

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

Если действие не найдено, запрос завершается неудачно и возвращает 404 (он НЕ пытается искать следующий маршрут).


Но должна быть возможность расширить рамки для достижения этого. Мое первое предположение - вы могли бы написать свой RouteHandler.

  1. RouteHandler
    В действительности не относящийся к ASP.NET MVC, RouteHandler - это компонент, который решает, что делать после выбора маршрута. Очевидно, что если вы измените RouteHandler, вы в конечном итоге обработаете запрос без ASP.NET MVC, но это может быть полезно, если вы хотите обрабатывать маршрут напрямую с некоторыми конкретными HttpHanlders или даже с классической WebForm.

В любом случае - я бы не советовал. Лучше держать тупой маршрут.


После некоторого быстрого поиска в Google - я больше не так оптимистичен по этому поводу. :)

2 голосов
/ 13 марта 2010

Я не думаю, что он проверит второй маршрут, потому что первый из них указан по умолчанию. Я думаю, что если вы переключите их, он проверит CatchAll, увидит, что он не соответствует маршруту, указанному в URL, и затем вернется к значению по умолчанию, поскольку вы предоставляете только имя контроллера, а не маршрут. Я думаю, что если вы хотите, чтобы CatchAll вообще что-то делал, вам нужно было бы нажать http://whatever/CatchAll/Error/MissingActionMethod,, и это должно было бы наступить раньше значения по умолчанию.

См. это для получения более подробной информации.

1 голос
/ 13 марта 2010

Вы должны попробовать использовать отладчик маршрута Фила Хаака из http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx,, чтобы увидеть, какой маршрут соответствует и почему.

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