Je veux encoder des données en base64 pour les mettre dans une URL, puis les décoder dans mon HttpHandler.
J'ai trouvé que l' encodage Base64 permet un caractère «/» qui va gâcher ma correspondance UriTemplate. Ensuite, j'ai trouvé qu'il existe un concept de "Base64 modifiée pour l'URL" de wikipedia:
Une variante Base64 modifiée pour l'URL existe, où aucun remplissage '=' ne sera utilisé, et les caractères '+' et '/' de la norme Base64 sont respectivement remplacés par '-' et '_', de sorte que l'utilisation des encodeurs / décodeurs d'URL n'est plus nécessaire et n'a aucun impact sur la longueur de la valeur codée, laissant la même forme codée intacte pour une utilisation dans les bases de données relationnelles, les formulaires Web et les identificateurs d'objets en général.
En utilisant .NET Je souhaite modifier mon code actuel, passant de l'encodage et du décodage base64 à l'utilisation de la méthode "base64 modifiée pour l'URL". Quelqu'un at-il fait ça?
Pour décoder, je sais que cela commence par quelque chose comme:
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
Mais, j'ai besoin d'ajouter potentiellement un ou deux caractères '=' à la fin, ce qui semble un peu plus complexe.
Ma logique d'encodage devrait être un peu plus simple:
// 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('/', '_');
J'ai vu le Guid to Base64 pour l' entrée URL StackOverflow, mais cela a une longueur connue et ils peuvent donc coder en dur le nombre de signes égaux nécessaires à la fin.