为什么HttpServerUtility.UrlTokenDecode在找不到填充字符时抛出异常?

时间:2015-06-08 00:51:57

标签: c# httpserverutility

所以,让我们在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,但在遇到不同类型的损坏时抛出异常?这个决定背后是否存在理由,或者仅仅是草率实施的情况?

1 个答案:

答案 0 :(得分:1)

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

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