我知道我可以使用HttpServerUtility.UrlTokenDecode Method来完成这项工作。但问题是我使用的是.NET 1.1,这种方法仅在.NET 2.0+中受支持。另外,我发现Convert.ToBase64String方法不是一种选择,因为here解决了差异。那么我还有其他选择吗?我是否必须编写自己的转换方法?
感谢。
答案 0 :(得分:0)
如果UrlTokenDecode
完成工作,为什么不使用它?我知道您使用的是.NET 1.1,但您可以使用Reflector从2.0框架反编译该方法,然后创建自己的版本。
这是该方法的基础代码。我没有对它进行过测试,但我想如果你把它作为一个方法添加到你的项目中的一个类中,你应该关闭并运行...
internal byte[] UrlTokenDecode(string input)
{
if (input == null)
{
throw new ArgumentNullException("input");
}
int length = input.Length;
if (length < 1)
{
return new byte[0];
}
int num2 = input[length - 1] - '0';
if ((num2 < 0) || (num2 > 10))
{
return null;
}
char[] inArray = new char[(length - 1) + num2];
for (int i = 0; i < (length - 1); i++)
{
char ch = input[i];
switch (ch)
{
case '-':
inArray[i] = '+';
break;
case '_':
inArray[i] = '/';
break;
default:
inArray[i] = ch;
break;
}
}
for (int j = length - 1; j < inArray.Length; j++)
{
inArray[j] = '=';
}
return Convert.FromBase64CharArray(inArray, 0, inArray.Length);
}
答案 1 :(得分:0)
如果标题所述,你需要编码而不是解码,那么这里是我测试过的方法的编码版本,似乎工作得很好
public static string UrlTokenEncode(byte[] input)
{
if (input == null)
throw new ArgumentNullException("input");
if (input.Length < 1)
return string.Empty;
string str = Convert.ToBase64String(input);
if (str == null)
return (string)null;
int length = str.Length;
while (length > 0 && (int)str[length - 1] == 61)
--length;
char[] chArray = new char[length + 1];
chArray[length] = (char)(48 + str.Length - length);
for (int index = 0; index < length; ++index)
{
char ch = str[index];
switch (ch)
{
case '+':
chArray[index] = '-';
break;
case '/':
chArray[index] = '_';
break;
case '=':
chArray[index] = ch;
break;
default:
chArray[index] = ch;
break;
}
}
return new string(chArray);
}