0

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

4

1 回答 1

1

您可以自己查看源代码HttpServerutility.UrlTokenDecode

但本质上,当输入末尾有一个数字时,它会通过评估的第一阶段并传递到 Base64 解码例程中。在这些例程内部FormatException是由于无意义的输入而引发的。

于 2015-06-08T01:08:56.913 回答