Перевести URL на маршрут - PullRequest
2 голосов
/ 14 ноября 2008

Мне кажется, что я заново изобретаю колесо, но мне нужно найти способ извлечь URL из перехвата и перенаправить его на другой маршрут.

Причина этого в том, что мне нужно сделать некоторые вещи, такие как добавление сеансовых файлов cookie для определенных URL-адресов, а затем передать их соответствующим действиям.

Каков наилучший способ реализации этого?

Заранее спасибо за любую помощь!

Ответы [ 4 ]

2 голосов
/ 20 ноября 2008

Вы можете попробовать изменить главную страницу во время выполнения. Это не самое красивое решение.

Тематическая поддержка

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

О, так ты не хочешь перенаправить? Вы хотите, чтобы URL остался:

mysite.com / партнеры / пепси / Продукты / cola.htm

но подайте:

mysite.com / продукты / cola.htm

У меня дома нет MVC, но вы не могли бы вместо этого определить свой маршрут по-другому?

Вместо:

routes.MapRoute(
    "Partner",
    "partners/{partner}/{*wildcard}",
    new { controller = "Partners", action = "PartnerRedirect" }
);

сделать:

routes.MapRoute(
    "Partner",
    "partners/{partner}/{controller}/{action}/{other stuff you need}",
    new { /* whatever defaults you want */ }
);

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

(я думаю) вы могли бы затем использовать фильтр действий на ваших действиях / контроллерах для выполнения соответствующих действий, основанных на параметре партнера (он должен быть в httpcontext фильтра, опять же я думаю!), Чтобы у вас не было повторять код в каждом действии, если вы хотите выполнить некоторые базовые проверки / действия для партнера.

Вот неплохая статья о том, как можно скинуть эту кошку:

http://weblogs.asp.net/stephenwalther/archive/2008/08/12/asp-net-mvc-tip-31-passing-data-to-master-pages-and-user-controls.aspx

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

Нет, фактически это перенаправление, но перенаправление невидимо для пользователя (во многом так же, как Server.Transfer () выполняется в веб-формах.

Ссылка, на которую вы указали, использует только одну главную страницу, тогда как у меня много главных страниц (около 200).

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

Я думаю, мне нужно создать ViewExtension, чтобы преодолеть эти проблемы ...

0 голосов
/ 15 ноября 2008

Если я понимаю вопрос ...

Глядя на свой предыдущий вопрос ( перенаправление на контроллер, но с другим мастером, использующим подстановочный знак подстановки ), вы хотите получить подстановочный знак из:

routes.MapRoute(
    "Partner",
    "partners/{partner}/{*wildcard}",
    new { controller = "Partners", action = "PartnerRedirect" }
);

А в действии Partners / PartnerRedirect отправьте его нужному контроллеру / действию, указанному в шаблоне?

Я понятия не имею, лучший способ сделать это, но, глядя на способы маршрутизации URL-адреса модульного теста, поднял это:

http://weblogs.asp.net/stephenwalther/archive/2008/07/02/asp-net-mvc-tip-13-unit-test-your-custom-routes.aspx

Я не уверен, что это точное совпадение (т. Е. Может не потребоваться имитировать материал), но похоже, что все данные возвращаются из GetRouteData для передачи в метод RedirectToAction.

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