Tom*_*han 10 c# base64 system.web
我试图消除对System.Web.dllWeb API项目的依赖,但偶然发现了一个调用HttpServerUtility.UrlTokenEncode(byte[] input)(和它相应的解码方法),我不知道要替换什么以确保向后兼容性.文档说这个方法
使用64位数字将字节数组编码为等效的字符串表示,可用于在URL上传输.
我尝试用Convert.ToBase64String(byte[] input)(及其相应的解码方法)代替,这在文档中非常类似地描述:
将一个8位无符号整数数组转换为其等效的字符串表示形式,该表示形式使用base-64数字进行编码.
但是,它们似乎并不完全等同; 当Convert.FromBase64String(string input)用于解码用其编码的字符串时HttpServerUtility,我得到一个异常说明
输入不是有效的Base-64字符串,因为它包含非基本64个字符,两个以上的填充字符或填充字符中的非法字符.
这两个转换实用程序有什么区别?消除这种依赖的正确方法是System.Web.HttpServerUtility什么?
有些用户建议这与此相关,但我不同意.这个问题是关于编码基64字符串的URL安全的方式一般,但我需要重现具体行为的HttpServerUtility,但没有一个依赖System.Web.
Tom*_*han 14
我接受了DGibbs的话,并使用了Source.事实证明,HttpServerUtility方法中发生以下情况:
使用System.Convert的输入转换为Base64.
更换+用-和/通过_.示例:Foo+bar/===变成Foo-bar_===.
替换=字符串末尾的任意数字,用一个整数表示它们的数量.示例:Foo-bar_===变成Foo-bar_3.
将字符串末尾的数字替换为相同数量的=符号.示例:Foo-bar_3变成Foo-bar_===.
更换-用+和_通过/.示例:Foo-bar_===变成Foo+bar/===.
使用System.Convert从Base64编码预处理的输入进行解码.
HttpServerUtility.UrlTokenEncode(byte[] input)将编码 URL 安全 Base64 字符串。在 Base64 中 +、/ 和 = 字符是有效的,但它们不是 URL 安全的,此方法将替换这些字符,而 则Convert.ToBase64String(byte[] input)不会。您也许可以放弃参考并自己完成。
通常,“+”被替换为“-”,“/”被“_”替换,填充“=”被删除。
这里接受的答案给出了一个代码示例:How to Achieve Base64 URL safeencoding in C#?
| 归档时间: |
|
| 查看次数: |
4776 次 |
| 最近记录: |