Voglio codificare i dati in base64 per inserirli in un URL e quindi decodificarli nel mio HttpHandler.
Ho scoperto che la codifica Base64 consente un carattere "/" che rovinerà la mia corrispondenza UriTemplate. Poi ho scoperto che esiste un concetto di "Base64 modificato per URL" da wikipedia:
Esiste un Base64 modificato per la variante URL, in cui non verrà utilizzato alcun riempimento "=" e i caratteri "+" e "/" di Base64 standard sono rispettivamente sostituiti da "-" e "_", in modo che l'utilizzo di codificatori / decodificatori URL non è più necessario e non ha alcun impatto sulla lunghezza del valore codificato, lasciando intatta la stessa forma codificata per l'uso in database relazionali, moduli web e identificatori di oggetti in generale.
Utilizzando .NET desidero modificare il mio codice corrente passando dalla codifica e decodifica base64 di base all'utilizzo del metodo "base64 modificato per URL". Qualcuno l'ha fatto?
Per decodificare, so che inizia con qualcosa del tipo:
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
Ma, ho bisogno di aggiungere potenzialmente uno o due caratteri "=" alla fine che sembra un po 'più complessa.
La mia logica di codifica dovrebbe essere un po 'più semplice:
// 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('/', '_');
Ho visto il Guid a Base64 per la voce StackOverflow URL , ma ha una lunghezza nota e quindi possono codificare il numero di segni di uguale necessari alla fine.