Dlaczego jest to, że ASP.App.Redirect.Redirect używa kodu statusu HTTP-302 ("Przeniesiony tymczasowo"), chociaż w większości przypadków kod statusu HTTP-301 ("Przeniesiony na stałe") byłoby bardziej odpowiednie?Response.Redirect kod stanu HTTP
Odpowiedz
Odpowiedzi o statusie 301 mają być buforowane i nie sądzę, że chcesz takie zachowanie dla większości przekierowań ASP/ASP.NET.
Program ASP.NET 4.0 ma w razie potrzeby metodę RedirectPermanent.
Jednym z powszechnych przypadków użycia Response.Redirect
jest przeniesienie użytkownika na inną stronę kodu po stronie serwera po odświeżeniu, np. coś podobnego do linii
private void MyButton_Click(object sender, EventArgs e)
{
if (some condition) {
Response.Redirect("ShowProduct.aspx");
} else {
Response.Redirect("SorryOutOfStock.aspx");
}
}
W tych przypadkach 301 byłoby całkowicie błędne. W rzeczywistości myślę, że powyższy przypadek (warunkowe przeniesienie użytkownika na inną stronę po interakcji UI) jest znacznie bardziej powszechnym zastosowaniem Response.Redirect
niż rzeczywisty ten scenariusz przeniesiony do innego adresu URL na zawsze (gdzie kod powrotu 301 byłby odpowiedni).
Oprócz odpowiedzi od Heinzi, jedynym podmiotem w Internecie, który prawdopodobnie zwróci większą uwagę na 301, będą wyszukiwarki. Większość przeglądarek nie śledzi i nie rejestruje 301, aby automatycznie przekierować wszelkie kolejne żądania dotyczące początkowego adresu URL. Przeglądarki traktują 301 identycznie jak traktują 302. Stąd 302 w dynamicznej zawartości, takiej jak wygenerowana w ASP.NET, jest całkiem odpowiednie.
Tak, to są pająki szukające, o które się martwię. – Vinz
Używałem ten poręczny trwałe przekierowanie z sukcesu:
public void RedirectPermanent(string newPath)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Status = "301 Moved Permanently";
HttpContext.Current.Response.AddHeader("Location", newPath);
HttpContext.Current.Response.End();
}
Używam również tego, ale zastanawiałem się, dlaczego muszę to zrobić "obejście". – Vinz
Błąd otrzymujesz nie jest spowodowane response.redirect!
Kod statusu odpowiedzi HTTP 301 Przeniesiony na stałe służy do stałego przekierowania, co oznacza, że bieżące łącza lub rekordy używające adresu URL, na który otrzymano odpowiedź Przenieś 301, powinny zostać zaktualizowane do nowego adresu URL podanego w polu Lokalizacja odpowiedzi .
Byłoby dobrze, gdybyś nie zamieszczał linków do http://onfrnz.com/search w każdej z twoich odpowiedzi, to jest trochę spamerskie. Dzięki. – Kev
+1 za poinformowanie nas o RedirectPermanent. – Heinzi
Nowa metoda RedirectPermanent dostarczana z programem ASP.NET 4.0 jest całkiem przydatna! Niestety projekt, nad którym pracuję, działa 2.0 ... – Vinz