Как я могу изменить способ динамического отображения ссылки действия MVC?
-
21-08-2019 - |
Вопрос
Мне нужно изменить способ, которым MVC отображает ссылки на действия (а также формы, URL-адреса и т. д.) на основе настроек конфигурации.Я пишу приложение Facebook с использованием MS MVC, и мои ссылки на действия должны отображать ссылку следующим образом:
<a href="/MyFBApplication/Home/Index/">home</a>
нажав на ссылку выше, вы перейдете к:
http://apps.facebook.com/MyFBApplication/Home/Index/
«MyFBApplication» — это название приложения Facebook.Чтобы построить ссылку, я начал с вызова
Html.ActionLink("Home", "Index", "Home")
Когда пользователь нажмет на ссылку, Facebook затем сделает запрос на эту ссылку под обложкой:
http://www.myapplicationserver.com/facebook/123456/Home/Index/
(123456 — это идентификатор клиента, он необходим)
Затем ответ отсюда обрабатывается Facebook и отображается пользователю как:
http://apps.facebook.com/MyFBApplication/Home/Index/
Как упоминалось выше, Facebook за кулисами запрашивает данные страницы.
http://www.myapplicationserver.com/facebook/123456/Home/Index/
Проблема в вызове
Html.ActionLink("Home", "Index", "Home")
отобразит ссылку, ведущую на
http://apps.facebook.com/facebook/123456/Home/Index/
и мне нужно, чтобы это привело к:
http://apps.facebook.com/MyFBApplication/Home/Index/
Я заставил его работать правильно, купив создание нового набора методов расширения.
Html.FacebookActionLink("Home", "Index", "Home")
Html.FacebookBeginForm("Index", "Home")
Html.Facebook(etc)
Но у этого есть «запах».Я хотел бы найти место, где я мог бы перехватить процесс Html.ActionLink() и изменить вывод.Тогда я смогу использовать все стандартные вызовы.
Спасибо!
Решение
Почему у этого есть «запах»?Microsoft создала методы ActionLink как методы расширения.Если они не соответствуют вашим целям, вы можете написать свои собственные, как вы это сделали.
Если бы вы действительно захотели, я думаю, вы могли бы создать свою собственную версию метода ActionLink в качестве перегрузки (при условии, что сигнатуры метода не будут двусмысленными).
Если вам нужно увидеть, как MS реализовала метод расширения ActionLink, ознакомьтесь с исходным кодом класса LinkExtensions.Ты можешь скачай это здесь.