Одностраничное приложение в AngularJS и ASP.Net отлично работает, но когда я обновляю свою страницу в браузере, я получаю 404 ошибки
Итак, я создал одностраничное приложение HTML5, и он работает хорошо. Страница находится в /App/
, и когда кто-то идет в контент, он выглядит как /App/Content/1234
.
Одна проблема: если пользователь обновляет страницу, сервер не может найти этот URL-адрес, потому что он фактически не существует. Если я отправлю их на /App/#/Content/1234
, они будут золотыми, но каков наилучший способ сделать это? У меня есть много разных стилей URL-адреса под /App.
Каков наилучший способ глобально уловить любой запрос в ~/App/(.*)
и перенаправить его на ~/App/#/$1
?
Единственный маршрут, зарегистрированный в MVC, является стандартным маршрутом OOTB.
Ответы
Ответ 1
Похоже, ваш сервер не переписывает URL-адреса на базовый URL-адрес приложения.
Повторная запись URL, требуемая на веб-сервере, зависит от сервера. Для Apache вы должны использовать mod_rewrite.
Вместо этого переключите Angular в "Режим Hashbang" (по умолчанию), чтобы URL-адреса сохраняли локальное состояние после # в URL-адресе.
Я не хочу, чтобы в моих приложениях требовались изменения конфигурации сервера, поэтому я рекомендую использовать режим hashbang.
См. Документы AngularJS. См. Раздел "Режимы Hashbang и HTML5". В разделе режима HTML5 описаны все проблемы конфигурации, необходимые для поддержки режима HTML5 для URL-адресов.
Ответ 2
Этот удивительный чувак описывает, как это сделать здесь.
Вкратце:
- Удалить MVC nugets (если вы не используете MVC-контроллеры для чего-либо) -
вы можете сохранить API-интерфейсы API. Храните пакеты WebPages и Razor.
Также удалите MVC-контроллеры и представления.
- Вы можете продолжать использовать .cshtml
файлы с некоторыми изменениями web.config. Вам понадобится это для
отправка одной посылкой.
- Наконец, вы добавляете правило перезаписи на web.config для указания всех URL-адресов (исключая контент, изображения, скрипты и т.д.) в index.html