ASP.NET MVCでのRedirect()とRedirectPermanent()


80

間いただきまし違いRedirect()RedirectPermanent()。いくつかの記事を読んだことがありますがRedirect()、いつ使用する必要があるのか​​わかりませんRedirectPermanent()。例を挙げていただけますか。

回答:


147

2つの基本的な違いは、RedirectPermanentブラウザにHTTP 301(永続的に移動)ステータスコードRedirectを送信するのに対し、HTTP 302ステータスコードを送信することです。

RedirectPermanentリソースが永続的に移動され、以前の場所からアクセスできなくなる場合に使用します。ほとんどのブラウザはこの応答をキャッシュし、元のリソースを再度要求することなくリダイレ​​クトを自動的に実行します。

使用Redirectリソースは、将来的には同じ場所(URL)で利用できる可能性がある場合。

システムにユーザーがいるとしましょう。既存のユーザーを削除するオプションもあります。Webサイトには、/user/{userid}特定のユーザーの詳細を表示するリソースがあります。ユーザーが削除されている場合は、/user/does-not-existページにリダイレクトする必要があります。この場合:

ユーザーが二度と復元されない場合は、URLがを指している場合でもRedirectPermanent、ブラウザーが/user/does-not-exist後続のリクエストで直接に移動できるようにする必要があります/user/{userid}

ユーザーが将来復元される可能性がある場合は、通常のを使用する必要がありますRedirect



6
RedirectPermanent2回目にクリックすると、コントローラーのアクションがスキップされ、他の場所にリダイレクトされた場合、元の関数でブレークポイントに到達しないため、デバッグ中に煩わしい場合があることに注意してください。これは、クリックするたびにキャッシュを空にしない限りです。
アントワーヌペルティエ2018年

永続的なリダイレクトを誤用したことがある場合、永続的なリダイレクトにアクセスして受信したブラウザーにそれを伝える方法はありますか?
eaglei22 2018

17

RedirectPermanentは301で、Redirectは302ステータスコードです。


12
参考までに、ブラウザは301を記憶し、必要に応じて元のURLに再度アクセスすることはありませんが、302は、リダイレクトがまだ存在する場合は毎回再チェックする必要があることを示しています。もちろん実際の実装は異なる場合がありますが、それが301と302の背後にある意図です
MichaelStum

1

異なる応答コードをブラウザに送信します。301は永続的なリダイレクトであり、302は一時的なリダイレクトです。最終的な効果は同じですが、クライアントがリンクにインデックスを付けたい場合(これを行う最も一般的なクライアントは検索エンジンです)、永続的なリダイレクトは、古いリンクを無視して新しいリンクの使用を開始するようにレコードを更新するようにクライアントに指示します。一時リダイレクトは、ページが今のところリダイレクトされていることをクライアントに通知しますが、インデックスデータベースから古いリンクを削除しないように指示します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.