7

OnActionExecuting特定の基準に応じて、ユーザーをログアウトし、サイトのホームページにリダイレクトするカスタム アクション フィルターがあります。リダイレクト部分の(取り除かれた)コードは以下のとおりです

  filterContext.Controller.TempData.Add("key", "Message");

  filterContext.Result = new RedirectResult("/");

上記のように、tempData メッセージも設定しています。ユーザーはログアウトされているため、ホームページにアクセスすると、[Authorize]属性によってログイン GET ページにリダイレクトされます。ログイン ビューで、tempData 内からのメッセージを表示しています。ただし、この状況では tempData は空です。

これは、ログイン POST の動作と非常によく似た動作です (無効な場合、ホームにリダイレクトされ、ログインにリダイレクトされ、ログイン ポストで設定された tempData メッセージが表示されます)。このコードは以下で見ることができます

   TempData.Add("key", errorMessage);

   return Redirect("/"));

ログインページに具体的にリダイレクトするのではなく、この方法で行っている理由は、このコードが多くのサイトに分散されているため、ログイン GET URL が何であるかがわからないためです。

これがログイン POST では機能するが、ActionFilter リダイレクトでは機能しない理由について、誰かが情報を持っていますか?

編集:

カスタム アクション フィルター内でログアウト呼び出しを削除すると、tempData は引き続きホーム アクション内に設定されますが、ログイン POST では機能するがアクション フィルターでは機能しない理由が説明されていませんか?

4

2 に答える 2

-1

結果を に設定するnew RedirectResult("/")と、現在のサーバー処理が停止し、クライアントに応答が送信され、クライアントに新しい URL (RedirectResult で指定したもの) を要求するように指示されます。2 番目の要求は異なり、前の処理からの値は含まれません。Redirect("/");またはServer.Transfer("/");を使用して、同じクライアント要求で新しいルートを処理してみてください。

于 2013-04-22T13:41:06.073 に答える