我想对数据进行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('/', '_');