Подтвердить что ты не робот

Одностраничное приложение в AngularJS и ASP.Net отлично работает, но когда я обновляю свою страницу в браузере, я получаю 404 ошибки

Итак, я создал одностраничное приложение HTML5, и он работает хорошо. Страница находится в /App/, и когда кто-то идет в контент, он выглядит как /App/Content/1234.

Одна проблема: если пользователь обновляет страницу, сервер не может найти этот URL-адрес, потому что он фактически не существует. Если я отправлю их на /App/#/Content/1234, они будут золотыми, но каков наилучший способ сделать это? У меня есть много разных стилей URL-адреса под /App.

Каков наилучший способ глобально уловить любой запрос в ~/App/(.*) и перенаправить его на ~/App/#/$1?

Единственный маршрут, зарегистрированный в MVC, является стандартным маршрутом OOTB.

4b9b3361

Ответ 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