HTML メールを作成するアプリケーションがあります。コンテンツにはエンコードされた URL パラメーターが含まれており、プロモーション コードや製品リファレンスなどが含まれている可能性があります。電子メールは Windows サービス (基本的にはコンソール アプリケーション) によって生成され、クリックされたリンクは MVC Web サイトによって処理されます。メールリンクを作成するコードは次のとおりです。
string CreateLink(string domain, string code) {
// code == "xyz123"
string encrypted = DES3Crypto.Encrypt(code); // H3uKbdyzrUo=
string urlParam = encrypted.EncodeBase64(); // SDN1S2JkeXpyVW890
return domain + "/" + urlParam;
}
MVC コントローラーのアクション メソッドは次のように構成されます。
public ActionResult Index(string id) {
string decoded = id.DecodeBase64();
string decrypted = DES3Crypto.Decrypt(decoded);
...
}
私たちのすべてのテストで、このメカニズムは期待どおりに機能しました。
入力は有効な Base-64 文字列ではありません。これは、base 64 以外の文字、3 つ以上の埋め込み文字、または埋め込み文字の間に空白以外の文字が含まれているためです。
URL の id パラメータは「見える」ようです。問題は、DecodeBase64 メソッドが失敗した "�nl����□��7y�b�8�sJ���=" などの「文字化けした」文字列を返すため、失敗している EncodeBase64/DecodeBase64 メソッドにあるようです。リンク。
さらに、ほとんどのエラーは IE6 ユーザー エージェントからのもので、これは文字エンコーディングの問題だと思いますが、その理由はわかりません。
参考までに、base-64 URL エンコーディングのコードを次に示します。
public static string EncodeBase64(this string source)
{
byte[] bytes = Encoding.UTF8.GetBytes(source);
string encodedString = HttpServerUtility.UrlTokenEncode(bytes);
return encodedString;
}
public static string DecodeBase64(this string encodedString)
{
byte[] bytes = HttpServerUtility.UrlTokenDecode(encodedString);
string decodedString = Encoding.UTF8.GetString(bytes);
return decodedString;
}
アドバイスをいただければ幸いです。