MVC C # custom MvcRouteHandler - Как? - PullRequest
       34

MVC C # custom MvcRouteHandler - Как?

4 голосов
/ 17 сентября 2008

Есть ли у кого-нибудь опыт предоставления пользовательского MvcRouteHandler? В моем приложении я хотел бы реализовать шаблон глобализации, такой как http://mydomain/en/about или http://mydomain/de/about.

Что касается настойчивости, я бы хотел, чтобы файл cookie читался, как только поступил запрос, и если в этом файле cookie есть языковые настройки, примените его (поэтому пользователь, получивший http://mydomain/, будет переведен в http://mydomain/en/ например). Если файл cookie отсутствует, я хотел бы получить первый язык, поддерживаемый браузером, применить его и сохранить в этом файле cookie.

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

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 17 сентября 2008

Я не верю, что для того, что вы делаете, требуется специальный обработчик маршрута.

Для ваших «глобализованных» URI подойдет обычный маршрут MVC с ограничением, согласно которому параметр «locale» должен быть равен «en», «de» и т. Д. Ограничение будет препятствовать тому, чтобы неглобальные URI соответствовали маршруту.

Для «неглобализованного» URI создайте «универсальный» маршрут, который просто перенаправляет на URI локали по умолчанию или с набором cookie.

Поместите «глобализированный» маршрут над «универсальным» маршрутом в Global.asax, чтобы «уже глобализированные» URI не попадали в перенаправление.

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

0 голосов
/ 17 сентября 2008

Вы должны быть в состоянии сделать это с шаблоном ASP.NET MVC по умолчанию, я делаю что-то подобное. Просто создайте свои маршруты как {language} / {controller} / {action} / {id}

Просто установите маршрут по умолчанию, который идет к контроллеру, который проверяет языковой куки и перенаправляет пользователя на основе этого куки.

...