Código para decodificação / codificação de um URL base64 modificado

Eu quero codificar dados base64 para colocá-lo em um URL e, em seguida, decodificá-lo dentro do meu HttpHandler.

Eu descobri queCodificação Base64 permite um caractere '/' que irá atrapalhar minha correspondência UriTemplate. Então eu descobri que há um conceito de "Base64 modificado para URL" da wikipedia:

Existe uma Base64 modificada para a variante de URL, onde nenhum preenchimento '=' será usado, e os caracteres '+' e '/' da Base64 padrão serão substituídos respectivamente por '-' e '_', de modo que o uso de codificadores / decodificadores de URL não é mais necessário e não tem impacto sobre o comprimento do valor codificado, deixando a mesma forma codificada intacta para uso em bancos de dados relacionais, formulários da web e identificadores de objetos em geral.

Usando o .NET Eu quero modificar meu código atual de fazer codificação base básica e decodificação para usar o método "modificado base64 para URL". Alguém já fez isso?

Para decodificar, sei que começa com algo como:

string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');

// Append '=' char(s) if necessary - how best to do this?

// My normal base64 decoding now uses encodedText

Mas, eu preciso adicionar potencialmente um ou dois '=' chars ao final que parece um pouco mais complexo.

Minha lógica de codificação deve ser um pouco mais simples:

// 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('/', '_');

Eu vi oGuid para Base64 para URL StackOverflow entrada, mas que tem um comprimento conhecido e, portanto, eles podem codificar o número de sinais de igual necessário no final.

questionAnswers(5)

yourAnswerToTheQuestion