2012-10-06 3 views
2

Итак, мое приложение MVC получает запрос от пользователя, который только что просмотрел, например. /home/about. Он проверяет RouteTable на соответствие шаблону и отправляет его правильному контроллеру и действию. Отлично.Замена распознавателя маршрута в ASP.NET MVC

Что делать, если я хочу взять на себя эту функцию? Я не хочу переписывать URL-адрес, я не хочу связываться с свойством RouteData в контексте фильтра или что-то в этом роде. Я хочу взять на себя роль, где маршрут X переводится в контроллер Y и действие Z моим приложением MVC. Что-то вроде MyRouteResolver : IRouteResolver (если это действительно существовало).

Я копался в MSDN, но я не могу найти никакого намека на то, где это делается. Любая помощь приветствуется.

ответ

1

Вы можете написать http-обработчик/модуль, который эффективно делает то же самое, посмотрите на System.Web.Routing.UrlRoutingHandler, чтобы посмотреть, как они это делают.

Одна из проблем заключается в том, что все вызовы в MVC для поиска URL-адреса маршрута не будут работать (например, UrlHelper), все они жестко запрограммированы для сбора статической коллекции маршрутов. Вы можете заполнить эту коллекцию маршрутов, чтобы она работала, но тогда я не уверен, что вы получаете от своего обработчика маршрутизации.

Текущий обработчик маршрутизации довольно гибкий, возможно, вы сможете написать свои собственные классы маршрутов (см. RouteBase) вместо замены всего обработчика.

Смежные вопросы