2011-01-10 6 views
0

これはクライアントの要求です。セッションが期限切れになります。これらのケースでは、ユーザがフォームをSQLテーブルにシリアライズして保存し、ユーザがログインした後にフォームをリダイレクトしてデータを再投入すると、データを保持したいと考えていますデータベースから取り出してデシリアライズします。ASP MVCのフォームモデルとは無関係の汎用メソッドによるデータの再ポスト

問題は、認証コードブロックにデータを格納、取得、再送信するすべてのロジックが必要なことです。データの格納、シリアル化、取得、デシリアライズ、それぞれのページへのユーザーのリダイレクトを行う方法はわかっていますが、どのフォームのすべてのモデルでも機能するように汎用性を持たせることはできません。

クライアントは、フォームアクションメソッドでこのタスクのコードを実行したくないです。例:

[HttpPost] 
[Authorize] 
public ActionResult Create(Post post) 
{ 
if (ModelState.IsValid) 
{ 
post.CreatedBy = (Guid)Membership.GetUser().ProviderUserKey; 
post.CreateTime = DateTime.Now; 

repo.Add(post); 
repo.Save(); 

return RedirectToAction("Index"); 
} 
else 
{ 
return View(post); 
} 
} 

ご覧のとおり、可能な限りきれいにしておきたいと考えています。彼はこの提案を受けました:

サーバーは、RAWテキスト形式でHTTP要求を受け取ります。このテキストを使用して、オブジェクト(RequestContext、FormCollectionコレクションなど)をビルドします。だから、あなたはフックで構築することができるはずです。生の要求を保存します。成功したログインの後、HTTP要求のこの以前の生のテキストを処理の中に注入することができました。

これを行う方法やMVCで可能であっても、実際にはわかりません。 誰かが助けることができれば、私は非常に感謝します。

おかげで、 ABTeam

+2

クライアントが実装の詳細を指定するのはなぜですか?このために要件文書に要件がありますか? –

+1

本当の疑問は、あなたのクライアントがあなたの代わりに私たちに支払うのはなぜですか? ;) – bzlm

+0

彼はすでにアプリケーションを持っていて、彼が望むのはそのカスタム認証の部分だけで、おそらく他のアプリケーションから実装提案を得ているはずです。これは外注業務であるため、要件文書などはありません。 –

答えて

2

これを行うための適切な方法は、データベース内のユーザーの進捗状況をキャプチャし、プロセスの次のステップに戻すための機構を提供することです。これは、URLの?step=nパラメータで行うことができます。ユーザーがログオフした場合、ユーザーは再度ログインして、プロセスの正しいステップに戻ることができます。

クライアントが認証コードブロックでこれを行うことは、機能の適切な使用ではありません。これは認可ブロックの目的ではなく、クライアントが記述する方法でビジネスロジックを実行しようとすると、セキュリティを妥協して、維持不能なコードになる可能性がほとんどあります。

+0

申し訳ありませんが、これがどのように私を助けてくれるのか分かりません。必ずしもウィザード型のリンクされたフォームではないので、ステップのパラメータを使用することもできます。それでフォームを再作成するにはどうしたらいいですか?繰り返しますが、ユーザーがログインした後に正しいフォームにリダイレクトできないわけではありません。問題は、データベースからデータをフォームに渡して、独立した一般的な方法で渡す方法がわからないことです使用されたモデルの私はあなたの答えを誤解していないことを願っていますが、もし私がしたら、もう少し詳細を述べてください。とにかく、私はこれが承認ブロックで行われるべきではないことに同意します。 –

0

承認ブロックは適切な場所ではありませんが、アクションフィルタを使用してかなり一般的な処理を行うことができます。

保存したデータをOnActionExecutingに読み込みます。私はパラメータとしてアクションメソッドに渡すことができるかどうかはわかりませんが、少なくともViewDataにそれを追加してモデルを生成するための出発点として使用できるはずですフォームページ。

ActionExecutingの前にモデルを保存することができるかどうかは不明ですが、アクションメソッドの実行後に存在するモデルが適切な代替方法である必要があります。

+0

ViewDataを使用することはできません。これは、フォームのデータを処理する必要があり、クライアントがそのデータを必要としないためです。たとえば、私が提供したアクションコードブロックを取る。問題に関しては、コードを変更してはいけません(クライアントはこれについて具体的でした)。 postパラメータは、ユーザーがログインした後でフォームを再送信するときに値を持つ必要があります。したがって、フォームを再送信した後にフォームを移入し、再送信時にpostパラメータが意図した値になるようにします。 –

関連する問題