4

間に違いはありますか?

public ActionResult logOff()
{
    FormsAuth.SignOut();
    return RedirectToAction("index", "Home");
}

と:

public ActionResult logOff()
{
    FormsAuth.SignOut();
    return index();
}
4

2 に答える 2

8

はい。

RedirectToAction()ユーザーはインデックスページにリダイレクトされます(これはブラウザのアドレスバーに表示されます)。代わりに、メソッドの結果を返すだけで、現在のページ( ?)が他のページのコンテンツでindex()埋められます。LogOff

この場合、違いはないかもしれませんが、アクションが何らかのロジックを実行する場合、ユーザーがページを更新するだけで問題が発生する可能性があります。

于 2012-06-19T14:24:40.927 に答える
1

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 つです。

于 2012-06-19T14:28:05.750 に答える