2016-05-12 10 views
1

ビューを返す前にidをエンコードする必要があります。私はエンコードしようとしているURLに渡されたときにIDが容易に推測することができますビューどのように私は、asp.net mvcのActionResultのURLにIDをエンコードすることができます

に戻る前に、
 [HttpGet] 
    public ActionResult Index(int id = 0) 
    { 
     var model = new ReviewModel(); 
     if (id != 0) 
     { 
      model.Id = id; 
      model = model.Get(); 
      //How can I encode model.Id here*** 
     } 
     ViewBag.IsAdmin = model.IsAdmin(User.Identity.Name); 
     model.SaveAudit("Visits Code of Conduct", User.Identity.Name); 



     return View(model); 
    } 
+0

数値が常に増加するIDを使用せず、モデルエンティティを識別するために単純にハッシュを使用してください。これらのハッシュを他のモデルプロパティとともに保存する必要があります。 –

+0

あなたの 'Index'アクションは無関係ですが、' int id'を 'string hash'などに変更する以外は同じままです。重要な部分は、モデルエンティティが作成されて永続化される場所です。そのような場所では、エンティティのハッシュを作成する必要があります。残りは同じままです。 –

+0

この質問はあなたが投稿したコードなしで違いはありません。あなたは基本的にあなたの宿題をするように人々に求めています。 – ataravati

答えて

0

それは整数なので、非整数識別子または手動暗号化/復号あなたのオプションを

を考えてみましょうモデルをまだモデルに保存することを検討したい場合は、エンコードしようとする限りかなり制限されます。 Guidのようなより一意の識別子を保存する能力があれば、値を「推測」または変更しようとするユーザーの要素を取り除くことが望ましいかもしれません。

整数値に基づいていくつかのタイプのハッシュを作成し、それに応じて値を渡してから、similar to the approach mentioned in this threadPOST側のハッシュ値を復号化できるとします。

おそらく一時的なストレージ使用

一つの考慮事項は、それが、その後のリクエストに応じて利用可能になるように値を格納するTempDataのような一時的な記憶のいくつかのフォームを使用することができます

if (id != 0) 
{ 
     model.Id = id; 
     model = model.Get(); 
     // Store the ID in TempData 
     TempData["CurrentReviewID"] = id; 
} 

そして、次のリクエスト、おそらくこれに対応するPOSTがトリガーされた場合、TempDataコレクションから値を読み取り、使用してください:

このような210の
[HttpPost] 
public ActionResult Index(ReviewModel model) 
{ 
     // Resolve your ID here 
     int int = Convert.ToInt32(TempData["CurrentReviewID"]); 

     // Continue as expected 
} 

アプローチや一気Sessionはリクエスト間この種の情報を永続化するために使用することができるが、これは、あなたが一般的にMVCアプリケーションで避けたいアプリケーションにステートフルの要素を追加することができます。

関連する問題