2012-01-19 88 views
2

ASP.NET MVCのルーティングパラメータをユーザーから特に隠す方法はありますか。具体的には、私は単に http://sitename.com/Doasp.net mvcのurlルーティングパラメータを非表示にする

になるが、内部的に私のコントローラにtitleIdを渡すためにリンク

http://sitename.com/Do?title = 2 をしたいと思います。

これは可能ですか?

おかげ

更新:はい、そこに現在の彼らのhrefのような持っている私のWebページ上のボタンがありますが、ユーザーが直接differntしようとすることで、ページの他の部分に行くいけないので、私はむしろ、すべてのパラメータを非表示にしたいですパラメーター。 @モーゼー、いいえ、提出したり投稿したりしないと、強く型付けされたビューを使用していました。ありがとう

+0

このページをリクエストしますか? –

+0

私はEmmanuelによるコメントに追加します - フォームの送信を使用して呼び出されるアクションを "実行"していますか?具体的にはPOSTメソッドを使用していますか? – Moshe

+0

「隠す」と解説できますか?あなたはそれをURLに入れたくないのですか?それとも、それをまったく送信したくないのですか? –

答えて

0

:ビューに渡す前に、あなたがあいまいな値にこれらを使用することができます

private int Obscure(int source) { 
    return (source*source) * 3; //or something clever you come up with 
} 

private int DeObscure(int obscuredValue) { 
    return (int)Math.Sqrt(obscuredValue/3); //inverse the Obscure method 
} 

あなたがそれらを返信された後でそれらを覆い隠す。気をつけてください。this stackoverflow postで説明されているように、これは実際にセキュリティを実装するための良い方法ではありません。

もう1つの方法は、クエスチング文字全体を取り込み、何らかの形で前後にマングリングするObscure/DeObscureプロシージャを作成することです。しかし、これはカスタムViewEngineを書く必要がありました。面白そうな音...

+0

ありがとう、私は今考えを得る。 –

2

パラメータがクライアント上にある限り、それらを暗号化しない限り、決して「非表示」にはなりません。パラメータを隠しフィールドに格納し、アクションメソッドをポストに設定すると、その値はURLに表示されません。しかし、Webについての知識が少しあるユーザーは、(何らかの方法で値を暗号化しない限り)隠しフィールドを操作することができます。

EDIT:保存する必要がある場合は、サーバー上のユーザーの資格情報を確認する必要があります。そうでなければ、他のサンプルのようにデータを隠すことができます。暗号化を使用することもできます。 ProtectData.Protect(...)を使用します。

あなたのコントローラに2つのプライベートメソッドを書くことができますビューに前後に合格する必要があり、単純な数値については
+0

OK。私は値を暗号化する方法を見ていきます。私はどのように値を暗号化することができますか? –

+0

ノーザイのユーザーを遠ざけたい場合は、データをエンコードする(または隠す)ことができます。しかし、これは簡単に推測できるのであまり安全ではありません。簡単な暗号化方法はProtectedData.Protect(..)ですが、同じマシン(ファームには適していません)の値を復号化する必要があります。 – slfan

関連する問題