Asp.net-Mvc-4

如何在 MVC 4 ActionLink 中加密查詢字元串 ID

  • July 23, 2019

如何將加密的 id 傳遞給ActionLink. 這是我寫在我的view

@model IEnumerable<forumAPP.tblTechnology>
@foreach (var item in Model)
{
string techName=item.TechName;
@Html.ActionLink(techName, "Details","Home", new { TopicID = item.TechID },null) // Here I would like to encrypt the TopicID
<br />
<br />
@Html.DisplayFor(modelItem => item.TechDesc)
}

以下是一些可用於編碼/解碼的簡單方法。編碼值不安全,如您所見,解碼它是微不足道的。如果您的目標是混淆 id,這將起作用。如果你需要保護它,你應該採取不同的方法。

public string Encode( string encodeMe )
{
   byte[] encoded = System.Text.Encoding.UTF8.GetBytes( encodeMe );
   return Convert.ToBase64String( encoded );
}

public static string Decode( string decodeMe )
{
   byte[] encoded = Convert.FromBase64String( decodeMe );
   return System.Text.Encoding.UTF8.GetString( encoded );
}

因此,您可以將這些方法放在您的控制器中,並使用 viewBag 將編碼的 TechId 傳遞給視圖

int techId = 1;
var encoded = Encode(id.ToString());
ViewBag.Encoded = encoded;

然後在您的連結中使用它

@Html.ActionLink(techName, "Details","Home", new { TopicID = ViewBag.Encoded },null)

(不過,您確實應該考慮使用視圖模型。ViewBag 雖然是一種將數據傳遞給視圖的方便且簡單的方法,但並不被認為是最佳實踐。熟悉視圖模型和強類型視圖將使您的 mvc 生活更加美好將來更容易。更不用說,為那些跟隨你的人生成更清潔和更可維護的程式碼。)

引用自:https://stackoverflow.com/questions/14773148