所以,让我们在 处抛出一个无意义的字符串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,但在遇到不同类型的损坏时抛出异常?这个决定背后是否有理由,或者这只是一个草率实施的案例?