注::私はすでにこの記事で説明した問題を解決しました。 Googleの多くをした後、私は適切な解決策を見つけることができませんでした。今私は答えを知っているように。私はこの投稿が同じ問題を解決しようとしている他の開発者の時間を節約すると考えました。URL /クエリ文字列にRNGCryptoServiceProvider生成文字列を使用する方法
問題:
私は暗号ランダムな文字列を生成し、ユーザにURLの一部としてそれを送りたいと思いました。
The request filtering module is configured to deny a request that contains a double escape sequence
か、それはあなたのルートを見つけることができません:Base64文字列を使用すると、おそらくエラーを取得します。
したがって、Base64 Stringでエスケープ文字を見つけたり置き換えたりするか、このソリューションを使用してください。
これは私の元のコードの外観です。
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;
}
}
Base64のバージョンを使用し、次に示すように簡単にURLを安全にします。http://stackoverflow.com/questions/26353710/how-to-achieve-base64-url-safe-encoding-in-c –