注: この投稿で言及されている問題は既に解決しています。多くのグーグルを行った後、私は正しい解決策を見つけることができませんでした。今、私は答えを知っています。この投稿は、同じ問題を解決しようとする他の開発者の時間を節約できると思いました。
問題:
暗号化ランダム文字列を生成し、それを URL の一部としてユーザーに送信したいと考えていました。Base64 文字列を使用すると、エラーが発生する可能性があります。
要求フィルタリング モジュールは、二重のエスケープ シーケンスを含む要求を拒否するように構成されています
そうしないと、ルートが見つかりません。
そのため、Base64 文字列のエスケープ文字をハック/回避して検索/置換するか、このソリューションを使用してください。
これは私の元のコードがどのように見えるかです。
public string GenerateRandomString()
{
var randomBytes = GenerateRandomBytes(512);
var randomString = Convert.ToBase64String(randomBytes);
return randomString;
}
private byte[] GenerateRandomBytes(int keyBitLength)
{
using (var provider = new RNGCryptoServiceProvider())
{
var lengthInByte = keyBitLength / 8;
var randomNumber = new byte[lengthInByte];
provider.GetBytes(randomNumber);
return randomNumber;
}
}
解決策は UrlTokenEncode です。ランダム バイトを URL エンコード トークンに変換する新しいメソッドを追加しました。
public string GenerateRandomStringToken()
{
var randomBytes = GenerateRandomBytes(512);
return HttpServerUtility.UrlTokenEncode(randomBytes);
}
private byte[] GenerateRandomBytes(int keyBitLength)
{
using (var provider = new RNGCryptoServiceProvider())
{
var lengthInByte = keyBitLength / 8;
var randomNumber = new byte[lengthInByte];
provider.GetBytes(randomNumber);
return randomNumber;
}
}