我们为样式表提供了一个IHttpHandler,并向页面添加了一个<link/>标记,如下所示:
HtmlGenericControl link = new HtmlGenericControl("link");
link.Attributes.Add("rel", "stylesheet");
link.Attributes.Add("href", "stylesheet.axd?d=" +
HttpServerUtility.UrlTokenEncode(token));
head.Controls.Add(link);在stylesheet.axd处理程序中,我们使用d查询字符串参数,如下所示:
var token = HttpServerUtility.UrlTokenDecode(Request.QueryString["d"]);这在大多数情况下都是可行的,但我们不时会在日志中发现以下两个例外之一:
[FormatException: Invalid character in a Base-64 string.]
System.Convert.FromBase64CharArray(Char[] inArray, Int32 offset, Int32 length)
System.Web.HttpServerUtility.UrlTokenDecode(String input)
...
[FormatException: Invalid length for a Base-64 char array.]
System.Convert.FromBase64CharArray(Char[] inArray, Int32 offset, Int32 length)
System.Web.HttpServerUtility.UrlTokenDecode(String input)
System.Web.HttpServerUtilityWrapper.UrlTokenDecode(String input)
...有什么想法会导致这种现象吗?
备注:
H 217/code>F 218发布于 2009-09-08 09:45:51
我们也有类似的问题,所以我们避免了UrlTokenEncode,原因是base64有时会把字符写成'==‘等等,所以它们不能在url中正确地传输。我认为.NET中有一个bug,但是我们将它改为了后续,并且它开始工作了。
我们就是这样做的,一直都是这样的。
url += "&d=" + HttpServerUtility.UrlEncode( Convert.ToBase64String( ... ))在接收方,我们只使用
data = Convert.FromBase64String( Request.QueryString["d"] ) 我们不需要使用UrlDecode,因为查询字符串对象已经以解码格式存储信息。
发布于 2018-07-12 08:30:27
UrlTokenDecode和UrlTokenEncode实际上并不对base64url进行解码/编码,但是可以通过添加一些内容来实现。此外,还有一些选择可能更好,也可能不会更好。
https://stackoverflow.com/questions/1392970
复制相似问题