8

で暗号化された 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)
}
4

3 に答える 3

20

エンコード/デコードに使用できるいくつかの簡単な方法を次に示します。エンコードされた値は安全ではなく、ご覧のとおり、デコードするのは簡単です。あなたの目標が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 );
}

したがって、これらのメソッドをコントローラーに配置し、エンコードされた TechId を viewBag でビューに渡すことができます。

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

そして、あなたのリンクでそれを使用するには

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

(ただし、実際にはビュー モデルの使用を検討する必要があります。ViewBag は、データをビューに渡すための便利で簡単な方法ですが、ベスト プラクティスとは見なされていません。ビュー モデルと厳密に型指定されたビューに慣れると、mvc ライフが大幅に向上します。言うまでもなく、あなたに従う人のために、よりクリーンで保守しやすいコードを作成してください。)

于 2013-02-08T14:13:33.340 に答える
0

これを行うための安全な方法を探しているときに、これに出くわしました。他の誰かがこれを安全に行いたい場合は、MvcSerializer を使用できます (MVC futures 3 プロジェクトで見つけましたが、MVC 4 に含まれているかどうかはわかりません)。例えば:

(new MvcSerializer()).Serialize(<Your data here>, SerializationMode.EncryptedAndSigned)

そして、プロセスを逆にするには...

(new MvcSerializer()).Deserialize(<Serialized data here>, SerializationMode.EncryptedAndSigned)

余計な手間をかけずにデータを暗号化して署名できるので、これは素晴らしいことです。futures プロジェクトには、モデル バインド中にこれを自動的に行うための属性もいくつか含まれています。

于 2014-06-11T14:24:58.347 に答える