我试图从Web项目中删除对System.Web.dll的依赖,但是无意中发现了对[HttpServerUtility.UrlTokenEncode(byte[] input)](https://msdn.microsoft.com/en-us/library/system.web.httpserverutility.urltokenencode(v=vs.110%29.aspx) (及其相应的解码方法)的调用,我不知道该用什么替换以确保向后兼容性。文件上说这个方法
使用基本64位数字将字节数组编码为其等效的字符串表示形式,可用于在URL上传输。
我尝试用[Convert.ToBase64String(byte[] input)](https://msdn.microsoft.com/en-us/library/dhx0d524(v=vs.110%29.aspx) (及其相应的解码方法)替换,这在文档中有非常类似的描述:
将由8位无符号整数组成的数组转换为其等效字符串表示形式,该字符串表示形式由基-64位数字编码。
然而,它们似乎并不完全等价;当使用Convert.FromBase64String(string input)解码用HttpServerUtility编码的字符串时,我会得到一个异常
输入不是有效的基- 64字符串,因为它包含一个非基本的64个字符、两个以上的填充字符或填充字符中的一个非法字符。
这两个转换实用程序之间有什么区别?消除对System.Web.HttpServerUtility**?**的依赖的正确方法是什么?
一些用户认为这是this one的翻版,但我不同意。这个问题是关于通常以url安全的方式编码字符串的基数64,但我需要重现HttpServerUtility的确切行为,但不依赖于System.Web。
发布于 2016-02-16 14:51:58
我相信了DGibbs和Used Source。结果表明,在HttpServerUtility方法中发生了以下情况:
编码到Base64
System.Convert将输入转换为Base64。+替换为-,/替换为_。示例:Foo+bar/===变成Foo-bar_===。=替换为表示它们是多少的整数。示例:Foo-bar_===变成Foo-bar_3。从Base64解码
=符号替换字符串末尾的数字。示例:Foo-bar_3变成Foo-bar_===。-替换为+,_替换为/。示例:Foo-bar_===变成Foo+bar/===。System.Convert解码来自Base64的预处理输入。发布于 2016-02-16 10:53:09
HttpServerUtility.UrlTokenEncode(byte[] input)将编码一个URL安全Base64字符串。在Base64 +中,/ and =字符是有效的,但它们不是URL安全的,此方法将替换这些字符,而Convert.ToBase64String(byte[] input)则不会。你也许可以放弃引用,自己去做。
通常,'+‘被'-’和'/‘替换为'_’填充'=‘只是删除。
这里接受的答案给出了一个代码示例:How to achieve Base64 URL safe encoding in C#?
https://stackoverflow.com/questions/35430084
复制相似问题