3

コントローラーメソッドで [Authorize] 属性を利用した後に投稿データを保持するには、ユーザーをログインページにリダイレクトし、認証が成功すると、ユーザーを目的の場所にリダイレクトします-これはどのように行われますか? ? デフォルトでは、元のフォーム送信は中継されません。以前の投稿への応答は、次のように述べています。

フォームの値と RedirectUrl を隠しフィールドにシリアル化する必要があります。認証後、隠しフィールドのデータを逆シリアル化し、RedirectUrl の値に基づいてリダイレクトします。これを処理するには、カスタム Authorize クラスが必要です。

私の質問は - 正しい方向に私をさらに向ける例はありますか? はい、コントローラ クラスに [Serialize] タグを追加できますが、カスタムの Authorize クラスを作成する方法がわかりません。カスタム Authorize クラスの作成に関する資料をオンラインでたくさん見ますが、逆シリアル化はどこで行われますか? 1 つまたは 2 つのレベルを深くすることができれば、非常に役立ちます。私は初心者です。

(以前の投稿にコメントしますが、私はこのサイトに不慣れで、十分なポイントを蓄積していません。他の投稿へのリンクも貼りますが、新しいユーザーもリンクを表示できないと書かれています!)

4

1 に答える 1

2

フォーム ポストされた値をセッション ディクショナリに保存するカスタム承認属性を作成し、承認が完了した後で、セッション ディクショナリから値を再設定できます。
次に例を示します。

public class CustomAuth:AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
      var form = filterContext.HttpContext.Request.Form;
      if (form.HasKeys()) {
       foreach(var key in form.AllKeys)
       {
         filterContext.HttpContext.Session[key]= form[key];
       }
      }
      base.OnAuthorization(filterContext);
    }
}

ご覧のとおり、承認の前にすべてのフォーム値がセッションに保存されます。
認証が完了したら、すべての値を復元できます。

[CustomAuth()]
public ActionResult Admin()
{
   // supposing you had a from input with the name "Name"
   string Name = Session["Name"] ?? string.Empty;

   return View();
}
于 2009-05-29T06:27:14.433 に答える