Veriyi bir URL'ye koymak için base64 kodlamak ve ardından HttpHandler'ım içinde kodunu çözmek istiyorum.
Base64 Kodlamasının UriTemplate eşleşmemi bozacak bir '/' karakterine izin verdiğini buldum . Sonra wikipedia'dan "URL için değiştirilmiş Base64" kavramı olduğunu buldum:
URL varyantı için değiştirilmiş bir Base64 mevcuttur, burada hiçbir '=' dolgusu kullanılmaz ve standart Base64'ün '+' ve '/' karakterleri sırasıyla '-' ve '_' ile değiştirilir, böylece URL kodlayıcılar / kod çözücüler kullanılır artık gerekli değildir ve kodlanmış değerin uzunluğu üzerinde hiçbir etkisi yoktur, aynı kodlanmış formu ilişkisel veritabanlarında, web formlarında ve genel olarak nesne tanımlayıcılarında kullanım için bozulmadan bırakır.
.NET kullanarak Geçerli kodumu temel base64 kodlama ve kod çözme işleminden "URL için değiştirilmiş base64" yöntemini kullanmaya değiştirmek istiyorum. Bunu kimse yaptı mı?
Çözmek için şunun gibi bir şeyle başladığını biliyorum
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
Ancak, biraz daha karmaşık görünen sonuna bir veya iki '=' karakter eklemem gerekiyor.
Kodlama mantığım biraz daha basit olmalı:
// Perform normal base64 encoding
byte[] encodedBytes = Encoding.UTF8.GetBytes(unencodedText);
string base64EncodedText = Convert.ToBase64String(encodedBytes);
// Apply URL variant
string base64UrlEncodedText = base64EncodedText.Replace("=", String.Empty).Replace('+', '-').Replace('/', '_');
URL StackOverflow girişi için Base64 için Guid'i gördüm , ancak bunun bilinen bir uzunluğu var ve bu nedenle sonunda gereken eşit işaretlerin sayısını kodlayabilirler.