所以,让我们在HttpServerUtility.UrlTokenDecode
抛出一个无意义的字符串,并确保它以数字0-9结尾:
HttpServerUtility.UrlTokenDecode("fu&+bar0");
并以FormatException
爆炸。
现在让我们尝试相同的,而不是最后的数字:
HttpServerUtility.UrlTokenDecode("fu&+bar");
没有异常发生,方法返回null。
据我所知,最后的字符用于表示字符串为base64编码时出现的填充字符数,而算法表示只允许为0-9之间的数字字符,正如我们在这个反编译代码中看到的那样:
int num = (int) input[length - 1] - 48;
if (num < 0 || num > 10)
{
return (byte[]) null;
}
所以我的问题是:为什么在传递特定类型的损坏令牌时此方法返回null,但在遇到不同类型的损坏时抛出异常?这个决定背后是否存在理由,或者仅仅是草率实施的情况?
答案 0 :(得分:1)
您可以自己查看HttpServerutility.UrlTokenDecode
的源代码。
但实质上,当输入结束时有一个数字时,它会通过第一阶段的评估并传递到Base64解码例程。在这些例程中,由于无意义的输入而引发FormatException
。