如何在mvc4 ActionLink中加密查询字符串ID

Dor*_*eka 7 asp.net-mvc-4

大家好我怎样才能传递加密的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)
}
Run Code Online (Sandbox Code Playgroud)

For*_*Two 17

以下是一些可用于编码/解码的简单方法.编码值不安全,正如您所看到的,解码它是微不足道的.如果你的目标是混淆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 );
}
Run Code Online (Sandbox Code Playgroud)

因此,您可以将这些方法放在控制器中,并使用viewBag将编码的TechId传递给视图

int techId = 1;
var encoded = Encode(id.ToString());
ViewBag.Encoded = encoded;
Run Code Online (Sandbox Code Playgroud)

然后在链接中使用它

@Html.ActionLink(techName, "Details","Home", new { TopicID = ViewBag.Encoded },null)
Run Code Online (Sandbox Code Playgroud)

(尽管如此,你应该考虑使用一个视图模型.ViewBag虽然是一种将数据传递给视图的简便方法,但不被认为是最佳实践.对视图模型和强类型视图的熟悉将使你的mvc生活更加丰富将来更容易.更不用说,为那些关注你的人生成更清晰,更易于维护的代码.)

  • 我觉得这个代码有问题,Convert.ToBase64String可能会生成(+)符号(我可能/我也是;我不确定)这些符号会导致URL出现问题 (3认同)