Je veux base64 encode les données à mettre dans une URL et puis le décoder à l'intérieur de mon HttpHandler.
J'ai trouvé que le Codage Base64 permet un caractère '/' qui va gâcher mon UriTemplate de correspondance. Ensuite, j'ai trouvé qu'il y a une notion de "modifié en Base64 pour les URL" de wikipedia:
Une modification de la Base64 pour les URL variante existe, où aucun rembourrage '=' sera utilisé, et le '+' et '/' caractères de la norme en Base64, sont respectivement remplacées par " - "et"_", afin que l'aide de l'URL des encodeurs/décodeurs n'est plus nécessaire et n'a aucune incidence sur la longueur de la valeur codée, laissant la même forme codée intact pour une utilisation dans des bases de données relationnelles, des formulaires web, et les identificateurs d'objet en général.
À l'aide de .NET je veux modifier mon code de base de l'encodage base64 et de décodage à l'aide de la "modifié base64 "URL" la méthode. Quelqu'un a fait cela?
Pour décoder, je sais que ça 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'éventuellement ajouter un ou deux '=' caractères à la fin qui ressemble un peu plus complexe.
Mon codage de la logique 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 en Base64 pour les URL StackOverflow entrée, mais qui a une longueur connue et, par conséquent, ils peuvent coder en dur le nombre de signes égal nécessaires à la fin.