I\'m trying to remove a dependence on System.Web.dll
from a Web API project, but have stumbled on a call to HttpServerUtility.UrlTokenEncode(byte[] input) (and its
I took DGibbs on their word and Used the Source. It turns out the following happens in the HttpServerUtility
methods:
Use System.Convert
to convert the input to Base64.
Replace +
by -
and /
by _
. Example: Foo+bar/===
becomes Foo-bar_===
.
Replace any number of =
at the end of the string, with an integer denoting how many they were. Example: Foo-bar_===
becomes Foo-bar_3
.
Replace the digit at the end of the string by the same number of =
signs. Example: Foo-bar_3
becomes Foo-bar_===
.
Replace -
by +
and _
by /
. Example: Foo-bar_===
becomes Foo+bar/===
.
Use System.Convert
to decode the preprocessed input from Base64.
HttpServerUtility.UrlTokenEncode(byte[] input)
will encode a URL safe Base64 string. In Base64 +, / and = characters are valid, but they are not URL safe, this method will replace these characters whereas the Convert.ToBase64String(byte[] input)
will not. You can probably drop the reference and do it yourself.
Usually, '+' is replaced with '-' and '/' with '_' padding '=' is just removed.
Accepted answer here gives a code example: How to achieve Base64 URL safe encoding in C#?