Redirect () vs RedirectPermanent () w ASP.NET MVC

80

Jaka jest różnica między Redirect()i RedirectPermanent(). Przeczytałem kilka artykułów, ale nie rozumiem, kiedy musimy używać Redirect()i RedirectPermanent(). Czy możesz pokazać przykład.

IFrizy
źródło

Odpowiedzi:

147

Podstawowa różnica między nimi polega na tym, że RedirectPermanentwysyła do przeglądarki HTTP 301kod stanu (Przeniesiony na stałe), podczas gdy Redirectwyśle HTTP 302kod stanu.

Użyj, RedirectPermanentjeśli zasób został przeniesiony na stałe i nie będzie już dostępny w swojej poprzedniej lokalizacji. Większość przeglądarek zapisze tę odpowiedź w pamięci podręcznej i wykona przekierowanie automatycznie bez ponownego żądania oryginalnego zasobu.

Użyj, Redirectjeśli zasób może być dostępny w tej samej lokalizacji (adresie URL) w przyszłości.

Przykład

Powiedzmy, że masz użytkowników w swoim systemie. Masz również możliwość usunięcia istniejących użytkowników. Twoja witryna posiada zasób, /user/{userid}który wyświetla szczegóły danego użytkownika. Jeśli użytkownik został usunięty, musisz przekierować do /user/does-not-existstrony. W tym przypadku:

Jeśli użytkownik już nigdy nie zostanie przywrócony, należy użyć, RedirectPermanentaby przeglądarka mogła przejść bezpośrednio do /user/does-not-existkolejnych żądań, nawet jeśli adres URL wskazuje na /user/{userid}.

Jeśli użytkownik może zostać przywrócony w przyszłości, należy użyć zwykłego Redirect.

Meryovi
źródło
6
Należy pamiętać, że RedirectPermanentmoże to być denerwujące podczas debugowania, ponieważ po drugim kliknięciu akcja kontrolera zostanie pominięta, a oryginalna funkcja nie osiągnie punktu przerwania, jeśli przekierowuje w inne miejsce. Chyba że opróżnisz pamięć podręczną przed każdym kliknięciem.
Antoine Pelletier
Jeśli kiedykolwiek popełniłeś błąd, nadużywając stałego przekierowania, czy istnieje sposób, aby przekazać to przeglądarce, która już odwiedziła i otrzymała stałe przekierowanie?
eaglei 22
17

RedirectPermanentto 301 i Redirectto kod statusu 302

dm03514
źródło
12
Dla porównania, przeglądarki mogą zapamiętać 301 i nigdy więcej nie trafić na oryginalny adres URL, jeśli chcą, podczas gdy 302 oznacza, że ​​powinny za każdym razem ponownie sprawdzić, czy przekierowanie nadal istnieje. Rzeczywiste implementacje mogą się oczywiście różnić, ale taka jest intencja stojąca za 301 i 302
Michael Stum
1

Wysyłają różne kody odpowiedzi do przeglądarki. 301 to stałe przekierowanie, 302 tymczasowe. Efekt końcowy jest taki sam, ale jeśli klient chce indeksować linki (najczęściej robią to wyszukiwarki), to stałe przekierowanie mówi klientowi, aby zaktualizował swoje rekordy, aby zignorował stary link i zaczął używać nowego . Tymczasowe przekierowanie informuje klienta, że ​​strona na razie przekierowuje, ale nie ma usuwać starego łącza z indeksowanej bazy danych

Abhishek Saha
źródło