Chcę kodować dane base64, aby umieścić je w adresie URL, a następnie zdekodować je w moim HttpHandler.
Odkryłem, że kodowanie Base64 umożliwia użycie znaku „/”, który zepsuje dopasowanie mojego UriTemplate. Potem odkryłem, że istnieje koncepcja „zmodyfikowanego Base64 dla adresu URL” z Wikipedii:
Istnieje zmodyfikowany Base64 dla wariantu adresu URL, w którym nie będzie używane dopełnienie „=”, a znaki „+” i „/” standardowego Base64 są odpowiednio zastępowane znakami „-” i „_”, dzięki czemu przy użyciu koderów / dekoderów adresów URL nie jest już konieczne i nie ma wpływu na długość zakodowanej wartości, pozostawiając tę samą zakodowaną postać nienaruszoną do użytku w relacyjnych bazach danych, formularzach internetowych i ogólnie w identyfikatorach obiektów.
Używając .NET Chcę zmodyfikować mój bieżący kod z podstawowego kodowania i dekodowania base64 na metodę „zmodyfikowanego base64 dla adresu URL”. Czy ktoś to zrobił?
Aby zdekodować, wiem, że zaczyna się od czegoś takiego:
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
Ale muszę potencjalnie dodać jeden lub dwa znaki „=” na końcu, co wygląda na nieco bardziej złożone.
Moja logika kodowania powinna być trochę prostsza:
// 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('/', '_');
Widziałem Guid to Base64 dla wpisu URL StackOverflow, ale ma on znaną długość i dlatego może na stałe zakodować liczbę znaków równości potrzebnych na końcu.