Oto scenariusz:Droga prawidłowo obsługi HttpAntiForgeryException w MVC 4 Zastosowanie
Mam stronę logowania, gdy użytkownik podpisać to jest przekierowywany do strony aplikacji w domu. Następnie użytkownik korzysta z przycisku wstecz przeglądarki, a teraz jest na stronie logowania. Próbuje zalogować się ponownie, ale teraz jest wyjątek:
HttpAntiForgeryException (0x80004005): Podany anty-fałszowanie żeton była przeznaczona dla użytkownika „”, ale bieżący użytkownik jest „username”.
Wiem, że jest to związane z buforowaniem. I wyłączone buforowanie przeglądarka działania logowania przy użyciu niestandardowych nocache filtr, który określa wszystkie wymagane nagłówki - no-cache, no-store, trzeba-revalidate, etc. Ale
- ten nie działa na wszystkich przeglądarkach
- zwłaszcza Safari (mobile w większości przypadków) totalnie ignoruje te ustawienia
postaram się zrobić hacki i zmusić safari komórkę do odświeżenia, ale to nie jest to, czego oczekuję.
Chciałabym wiedzieć, czy mogę:
- wyjątek uchwyt bez pokazywania użytkownikowi jakikolwiek problem istnieje (całkowicie przezroczysty dla użytkownika)
- uniknąć tego problemu poprzez zastąpienie anty oszustwie nazwę tokena użytkownika, które będą pozwól użytkownikowi na ponowne zalogowanie się bez tego wyjątku, jeśli moje hacki związane z buforowaniem przeglądarki przestaną działać w następnych wersjach przeglądarek.
- Naprawdę nie chciałbym polegać na zachowaniu przeglądarki, ponieważ każdy zachowuje się inaczej.
UPDATE 1
wprowadzić pewne wyjaśnienia, wiem, jak obsługiwać błędy w MVC. Problem polega na tym, że te błędy obsługi wcale nie rozwiązują mojego problemu. Podstawową ideą obsługi błędów jest przekierowanie do niestandardowej strony błędu z ładną wiadomością. Ale chcę zapobiec wystąpieniu tego błędu, aby nie obsługiwać go w sposób widoczny dla użytkownika. Przez uchwyt rozumiem catch nazwa_użytkownika zastąp lub inne odpowiednie działanie, a następnie kontynuuj logowanie.
UPDATE 2
Dodałem poniżej rozwiązania, które pracuje dla mnie.
to działało świetnie dla mnie. Nie potrzebuję tego do niczego. Po prostu nie rzucaj żółtym ekranem. – hal9000