如何将url编码为base64字符串?

时间:2010-09-16 03:03:48

标签: .net asp.net

我知道我可以使用HttpServerUtility.UrlTokenDecode Method来完成这项工作。但问题是我使用的是.NET 1.1,这种方法仅在.NET 2.0+中受支持。另外,我发现Convert.ToBase64String方法不是一种选择,因为here解决了差异。那么我还有其他选择吗?我是否必须编写自己的转换方法?

感谢。

2 个答案:

答案 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);
}