データを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
ただし、最後に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('/', '_');
URLStackOverflowエントリのGuidtoBase64を見たことがありますが、これは既知の長さであるため、最後に必要な等号の数をハードコーディングできます。