間に違いはありますか?
public ActionResult logOff()
{
FormsAuth.SignOut();
return RedirectToAction("index", "Home");
}
と:
public ActionResult logOff()
{
FormsAuth.SignOut();
return index();
}
間に違いはありますか?
public ActionResult logOff()
{
FormsAuth.SignOut();
return RedirectToAction("index", "Home");
}
と:
public ActionResult logOff()
{
FormsAuth.SignOut();
return index();
}
はい。
RedirectToAction()
ユーザーはインデックスページにリダイレクトされます(これはブラウザのアドレスバーに表示されます)。代わりに、メソッドの結果を返すだけで、現在のページ( ?)が他のページのコンテンツでindex()
埋められます。LogOff
この場合、違いはないかもしれませんが、アクションが何らかのロジックを実行する場合、ユーザーがページを更新するだけで問題が発生する可能性があります。
Post/Redirect/Get Patternを見てください。
Web フォームが HTTP POST 要求を介してサーバーに送信されると、Web ユーザーが特定のユーザー エージェントでサーバーの応答を更新しようとすると、元の HTTP POST 要求の内容が再送信される可能性があり、次のような望ましくない結果が生じる可能性があります。重複した Web 購入。この問題を回避するために、多くの Web 開発者は PRG パターン1を使用します。— Web ページを直接返す代わりに、POST 操作はリダイレクト コマンドを返します。HTTP 1.1 仕様では、HTTP 303 応答コードが導入され、この状況で、最初の HTTP POST 要求が再送信されることなく、Web ユーザーのブラウザーがサーバー応答を安全に更新できるようになりました。ただし、現在使用されている最も一般的な商用アプリケーション (新旧を問わず) は、これらの状況で HTTP 302 応答を発行し続けています。通常、HTTP 301 の使用は避けられます。HTTP 1.1 準拠のブラウザーは、HTTP 301 の受信後にメソッドを GET に変換しないためです。これは、HTTP 302 の場合より一般的に行われます。[2] ただし、POST パラメータを GET パラメータに変換してログに記録することが望ましくない場合は、HTTP 301 を使用することをお勧めします。PRG パターンは、重複フォーム送信のすべてのシナリオに対応できるわけではありません。PRG が解決できない既知の重複したフォーム送信には、次のようなものがあります。サーバー ラグが原因で最初の送信が完了する前に Web ユーザーが更新した場合、特定のユーザー エージェントで HTTP POST 要求が重複して発生します。
これは、リダイレクト パターンが asp.net mvc の HTTP 投稿でも使用される最も一般的なケースの 1 つです。