2012-03-22 13 views
0

モデルのデータがURLに表示されていないビューモデルをビューに渡すにはどうすればよいですか?URLに表示されるモデルデータを停止するには

public ActionResult MyView(MyModel model) 
{ 
    model.memberId = "Secret Id" 
    return View("MyView", model) 
} 

URLはデータが非常に秘密ではないですが、それはURLに表示されたことは本当に受け入れられない

http://localhost:1234/MyView?memberId=Secret Id 

として表示されます。

+0

あなたが本当に選択肢を持っているし、クライアントに実用的ではないときに使用可能それにURLを追加することを避けるためにどこでもPOST/AJAXを使用していないGETリクエストを実行します。シークレットIDではなく、サーバー側でいつでも元に戻すことができるトークンを使用することができます。 – tawman

+0

あなたは、クライアントが常に推測することができない場合は、(サーバー上の)あなたのセッションで保存されなければならないのuserIdを保存したい場合。クライアントを信頼しないでください。 –

答えて

1
私はあなたにアップしているかわからない

、あなたはviewmodelの秘密は何も設定してはいけません - 名前が見られることを言うようのviewmodelがあるので...

しかし、あなたの質問に答えるために:へあなたが郵便でフォームを送信することができ、URLでMEMBERIDの破壊に対する避ける - それは同様に確保されないのはもちろんです。

セッションに保存する方がよいでしょう。

+0

ありがとうMarc。私がやっていることは、彼らが次のビューに表示できるように、メンバーの詳細情報を渡しているので、彼らは目に見えないですが、私は、人々は、単にブラウザの履歴を見て、メンバーの詳細情報を取得する必要はありませんことが必須ではありません。 – stuartdotnet

+0

さらに、POST POSTを送信すると、URLが入力されます。 – stuartdotnet

+0

そうであってはいけません。あなたの視野を投稿し、あなたが同様にページを要求するところリンク/フォームを提出してください。 – Marc

0

すでに述べたように、ビューモデルは、ビューのモデルとまったく同じです。 1つの図形またはフォーム(非表示のフォーム値であっても、URLの一部であっても、ajax呼び出しであっても)にクライアントに公開すべきでないビューモデルには、決してデータを格納しないでください。

データを秘密にする必要があり、アクション間で渡す場合は、TempDataまたはASPNetセッションを使用します。そうすれば、クライアントの近くにはどこにも行きません。

私はそれをクライアントに送信することは、自動化システムは、文字列を読み取ることができるだろうことを意味するとして、実際のCAPTCHAの文字列を格納するためにTempDataをを使用してCAPTCHAジェネレータを書きました。私はセッション上でTempDataを使用することをお勧めしますが、セッションは自分で管理する必要がありますが、1つの要求に対してのみ永続化されます。

TempData["MyDataIdentifier"] = "MyObjectOrValue"; 
関連する問題