Я хочу, чтобы base64 закодировал данные, чтобы поместить их в URL-адрес, а затем декодировать его в моем HttpHandler.
Я обнаружил, что Base64 Encoding позволяет использовать символ '/', который испортит совпадение UriTemplate. Затем я обнаружил, что существует концепция "модифицированного Base64 для URL" из википедии:
Существует модифицированный вариант Base64 для URL, в котором не будет использоваться padding '=', а символы '+' и '/' стандартного Base64 заменяются соответственно на "-" и "_", поэтому использование URL-адреса кодеры/декодеры больше не нужны и не влияют на длину закодированного значения, оставляя неизменную такую же закодированную форму для использования в реляционных базах данных, веб-формах и идентификаторах объектов вообще.
Использование .NET. Я хочу изменить свой текущий код, выполнив базовую кодировку и декодирование base64, используя метод "измененный base64 для URL". Кто-нибудь сделал это?
Чтобы декодировать, я знаю, что он начинается с чего-то вроде:
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
Но мне нужно добавить один или два символа '=' в конец, который выглядит немного сложнее.
Моя логика кодирования должна быть немного проще:
// 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('/', '_');
Я видел Guid для Base64 для URL запись StackOverflow, но имеет известную длину, и поэтому они могут жестко кодировать количество равных знаков, необходимых в конце.