#asp.net-mvc #angular #backbone.js #asp.net-mvc-5
#asp.net-mvc #angular #backbone.js #asp.net-mvc-5
Вопрос:
У нас есть существующее веб-приложение MVC5, использующее, по большей части, магистраль с магистральной маршрутизацией. Когда вы попадаете на сайт, он загружает исходный базовый home/index.html который загружает все магистральные скрипты и т.д.
Мы вводим Angular2 (версия: 2.0.1) в микс и получаем новый index.html страница для Angular, обслуживаемая нашим ngController.
В настоящее время у нас есть приложение, использующее стратегию определения местоположения хэша; как только приложение загружается, маршрутизация берет под контроль URL-адрес, и мы переходим от чего-то вроде:
http://blah.com/ng/#/reports
Для
http://blah.com/#/reports
Что, как правило, нормально, и просмотр в приложении angular изменит URL на / #/pageXyz и т. Д.
… Пока вы не попытаетесь обновить или перейти по глубокой ссылке непосредственно к последним примерам, в которых браузер технически просто собирается
http://blah.com
Который обслуживает исходную страницу индекса магистрали.
Каковы варианты решения этой проблемы?
- Возможно ли, чтобы маршрутизатор Angular добавлял префикс к маршрутам с помощью контроллера ng?
- Может ли магистральная сеть перенаправлять любые маршруты / # / * на страницы ng / # / *?
- Какое-то конкретное сопоставление для маршрутов MVC, которые могут распознавать угловой URL? (Хотя я считаю, что # не делают разреза, когда дело доходит до URL-адресов, поэтому не могут сопоставить их в маршрутизации?)
- Было бы лучше переключиться на URL-адреса HTML5? (Лучше для маршрутизации MVC?)
За одну ночь сайт Angular, похоже, получил неполную страницу-тизер для настройки VS2015 (примечание: в настоящее время мы используем VS2013), и в самом низу вы попадаете в тупик, по-видимому, связанный с проблемой:
Примечание по приложениям маршрутизации
Если это приложение использовало угловой маршрутизатор, обновление браузера может вернуть 404 — страница не найдена. Посмотрите на адресную строку. Содержит ли он URL-адрес навигации («глубинную ссылку»)? Нам нужно настроить сервер для возврата index.html за эти просьбы. Пока мы этого не сделаем, удалите путь навигации и снова обновите.
Заранее спасибо.
Ответ №1:
В конечном итоге пришлось изменить магистральную маршрутизацию.
Плюсы: это работает и было всего две строки:
#restore angular url
if location.pathname == '/' and location.hash.substring(0,2) == '#/'
location.href = location.href.replace('/#/','/ng/#/')
Недостатки: при обновлении / глубокой ссылке вы получаете две полные загрузки страницы — сначала в магистраль загрузки home / index, затем в ng / index, загружающий angular после перенаправления.
Тем не менее, учитывая все обстоятельства, тот факт, что он вообще работает, достаточно хорош для меня.