我想对数据进行base64编码,以将其放入URL,然后在我的HttpHandler中对其进行解码。
我发现Base64编码允许使用’/’字符,这会弄乱我的UriTemplate匹配。然后,我发现维基百科有一个“ URL的修改的Base64”概念:
存在针对URL变体的经过修改的Base64,其中将不使用填充’=’,并且标准Base64的’+’和’/’字符分别被替换为’-‘和’_’,以便使用URL编码器/解码器不再是必需的,并且对编码值的长度没有影响,通常保留相同的编码形式以供在关系数据库,Web表单和对象标识符中使用。
使用.NET,我希望将当前代码从基本的base64编码和解码修改为使用“ URL的修改后的base64”方法。有人这样做吗?
要解码,我知道它始于以下内容:
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('/', '_');
我已经看到了针对URL StackOverflow条目的Base64指南,但是它的长度是已知的,因此它们可以对最后所需的等号进行硬编码。
这应该正确地填补它:-
base64 = base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '=');