データをbase64でエンコードしてURLに配置し、HttpHandler内でデコードしたいと考えています。
Base64エンコードでは、UriTemplateの一致を台無しにする「/」文字が許可されることがわかりました。次に、Wikipediaから「URLのBase64を変更する」という概念があることがわかりました。
URLバリアントの変更されたBase64が存在し、パディング「=」は使用されず、標準のBase64の「+」および「/」文字はそれぞれ「-」および「_」に置き換えられるため、URLエンコーダー/デコーダーを使用するは不要になり、エンコードされた値の長さに影響を与えません。同じエンコードされたフォームをそのままリレーショナルデータベース、Webフォーム、およびオブジェクト識別子で使用するために残します。
.NETを使用して、現在のコードを基本的なbase64エンコードおよびデコードから「変更されたbase64 for base64」メソッドを使用するように変更したいと思います。誰かこれをやったことがありますか?
デコードするには、次のようなものから始めます。
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
しかし、私は潜在的に1つまたは2つの「=」文字を最後に追加する必要がありますが、これは少し複雑に見えます。
私のエンコーディングロジックはもう少し単純なはずです。
// 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のGuidを確認しましたが、その長さはわかっているため、最後に必要な等号の数をハードコードできます。