Настраиваемый параметр catch-all в маршрутизации - PullRequest
2 голосов
/ 08 мая 2009

Я недавно хотел иметь специальное правило маршрутизации: {* независимо от} / details / {Id} / {itemName}

Я знаю, что исключение будет выдано после запуска приложения. Например, в моем приложении шаблон URL-адреса: www.domain.com/root/parent/child/.../child/details/30/itemname

.

но текущая маршрутизация не поддерживает это. Как можно настроить обработчик маршрутизации, чтобы он работал?

Ответы [ 3 ]

2 голосов
/ 12 января 2011

Был написан класс, который поддерживает это

Я написал такой класс, который может обрабатывать весь сегмент в любом месте URL. В нем довольно много кода, но он работает, как и ожидалось, и я использовал его в реальном проекте.

Проверьте сами и посмотрите, отвечает ли он вашим потребностям.

1 голос
/ 07 июня 2009

Я думаю, что вы можете захотеть взглянуть на расширение класса System.Web.Routing.RouteBase и переопределить метод GetRouteData (). С его помощью вы можете просмотреть запрошенный URL-адрес и решить, соответствует ли он вашему шаблону и, если да, создать и вернуть новый экземпляр RouteData, который указывает на контроллер и действие, которое вы хотите обработать, запрос. В противном случае, если вы не соответствуете запрошенному URL, вы возвращаете нуль.

См. Следующие примеры:

Pro ASP.NET MVC Framework Стив Сандерсон

Custom RouteBase

1 голос
/ 06 июня 2009

Проблема в том ... как он узнает, когда остановиться?

сегмент {* независимо} будет совпадать:

/foo/
/foo/bar
/foo/bar/details/4/moreFoo
/foo/bar/andmore/details/4/moreFoo

Поскольку параметр catch-all включает в себя все, он никогда не остановится.

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

например:

games/details/{id}/{itemName}
widgets/details/{id}/{itemName}
books/details/{id}/{itemName}

Конечно, это уже предусмотрено в маршруте по умолчанию {controller} / {action} / {id}

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