Создание исходящих ссылок на основной сайт из виджета - PullRequest
1 голос
/ 26 октября 2011

У меня есть веб-приложение ASP.NET MVC 3, которое живет на сервере 1:

http://www.mysite.com

И у меня есть виджет (также веб-приложение ASP.NET MVC 3), который живет на сервере 2:

http://widget.www.mysite.com

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

Так что, если я сделаю что-то подобное в проекте виджета:

@Html.RouteLink("Outbound link", "MainWebsiteRoute", "http", "http://www.mysite.com", string.Empty, null)

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

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

Как мне это сделать? Нужно ли жестко задавать URL-адреса?

Ответы [ 2 ]

1 голос
/ 26 октября 2011

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

Пример маршрута на основном сайте:

context.MapRoute(
   "Q&A - Individual Q",
   "{locationUniqueUri}/questions/{questionUniqueUri}",
   new { controller = "Questions", action = "Detail" },
);

Дублированный маршрут в виджете:

RouteTable.Routes.MapRoute(
   "Outbound - Q&A - Individual Q",
   "{locationUniqueUri}/questions/{questionUniqueUri}"
);

Обратите внимание, что по умолчанию нет маршрутов - это потому, что мне все равно, поскольку это касается сопоставления маршрута с контроллером / действием. Но это происходит на сайте, а не в виджете. Все, что меня беспокоит, это генерация URL.

Затем я создал простую оболочку для RouteLink с именем OutboundRouteLink, которая указывает имя хоста (для основного веб-сайта) и создает ссылку.

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

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

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

0 голосов
/ 26 октября 2011

Вы используете области?Если нет, то, возможно, вам следует.Таким образом, вы можете просто указать область для маршрута, и она сможет решить URL для вас.Учитывая ваши примеры URL, вы можете создать свой основной сайт с вашим сайтом виджетов в качестве области.Предоставление пустой строки для параметра области в значениях маршрута позволит вам ссылаться на контроллер / действие на главном сайте с сайта виджета.

...