Pytanie Jedna strona aplikacji w AngularJS i ASP.Net działa dobrze, ale kiedy odświeżam moją stronę w przeglądarce, dostaję 404 błędy


Dlatego skonfigurowałem jedną stronę HTML5 i działa dobrze. Strona znajduje się pod adresem /App/ a kiedy ktoś idzie do treści, wygląda tak /App/Content/1234.

Jeden problem: jeśli użytkownik odświeży stronę, serwer nie może znaleźć tego adresu URL, ponieważ w rzeczywistości nie istnieje. Jeśli je wyślę /App/#/Content/1234, są złote, ale jaki jest najlepszy sposób na zrobienie tego? Mam wiele różnych stylów URL pod / App.

Jaki jest najlepszy sposób, aby globalnie złapać każde żądanie w ramach ~/App/(.*) i przekieruj do ~/App/#/$1?

Jedyną trasą zarejestrowaną w MVC jest standardowa trasa OOTB.


12
2017-08-03 00:43


pochodzenie


tarkus.me/post/32121691785/angularjs-with-asp-net-mvc-4 - Grief Coder


Odpowiedzi:


Wygląda na to, że Twój serwer nie zapisuje ponownie adresów URL pod bazowym adresem URL aplikacji.

Ponowne zapisanie adresu URL na serwerze internetowym zależy od serwera. W Apache użyjesz mod_rewrite.

Zamiast tego zmień Angular na "tryb Hashbang" (domyślny), aby wszystkie adresy URL zapisywały stan lokalny po # w adresie URL.

Nie chcę, aby moje aplikacje wymagały zmian konfiguracji serwera, dlatego polecam tryb hashbang.

Widzieć AngularJS docs. Zobacz sekcję "Hashbang i tryby HTML5" Sekcja trybu HTML5 opisuje wszystkie problemy konfiguracyjne potrzebne do obsługi trybu HTML5 dla adresów URL.


4
2017-08-03 02:30



Tak, skończyłem wracając do trybu hashbang. Co nie jest tym, czego chciałem, naprawdę, ale będzie musiał zrobić, dopóki nie wymyślę lepszego rozwiązania. Nie jestem na Apache niestety, wymaganiem były technologie Microsoft (tak, może to być wymóg), więc dopóki nie wymyślę dobrego sposobu na to w ASP.Net, hashbang pozostanie. - Ben Lesh
Słyszę Cię ... Styl HTML5 byłby z pewnością fajną aplikacją dla jednej strony, ale to jeszcze nie jest tutaj. Dobrą wiadomością jest to, że użytkownicy wcale nie koncentrują się na adresie URL - dlatego przeglądarki mobilne nie wyświetlają go nawet po wejściu na stronę. Przeglądarki desktopowe będą również w przyszłości zmniejszać ich widoczność. - Larry K
Problem z używaniem metody "hashbang" polega na tym, że musisz ją zatwierdzić w pełni: każdy link, który nie powinien odświeżać strony, musi zaczynać się od hasza i wybranego hashPrefix. OTH, w trybie HTML5, Angular przerobi link, jeśli wykryje starszą przeglądarkę. - Schmuli


Ten niesamowity koleś opisuje, jak to naprawić tutaj.

W skrócie:

  1. Usuń nugety MVC (chyba że używasz kontrolerów MVC do czegokolwiek) - możesz utrzymywać nugety Web API. Zachowaj strony internetowe i pakiety Razor. Usuń także kontrolery i widoki MVC.
  2. Możesz nadal używać .cshtml pliki z pewnymi modyfikacjami web.config. Będziesz tego potrzebował sprzedaż wiązana.
  3. Na koniec dodaje się regułę przepisywania na web.config, aby wskazać wszystkie adresy URL (z wyjątkiem zawartości, obrazów, skryptów itp.) Do pliku index.html

2
2018-06-27 14:19