最佳答案
我希望 base64编码数据,将其放入 URL 中,然后在我的 HttpHandler 中对其进行解码。
I have found that Base64编码 allows for a '/' character which will mess up my UriTemplate matching. Then I found that there is a concept of a "modified Base64 for URL" from wikipedia:
存在一个修改过的用于 URL 变体的 Base64,其中不使用填充“ =”,并且标准 Base64的“ +”和“/”字符分别被“-”和“ _”替换,因此使用 URL 编码器/解码器不再是必要的,并且对编码值的长度没有影响,保留相同的编码形式完整地用于关系数据库、 Web 表单和一般的对象标识符。
Using .NET I want to modify my current code from doing basic base64 encoding and decoding to using the "modified base64 for URL" method. Has anyone done this?
要解码,我知道它的开头是这样的:
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 的 Base64指南 StackOverflow 条目,但是它有一个已知的长度,因此他们可以硬编码所需的等号的数量在最后。