C# System.FormatException:';Base-64字符数组或字符串的长度无效。';

C# System.FormatException:';Base-64字符数组或字符串的长度无效。';,c#,base64,decode,C#,Base64,Decode,我的头撞在墙上,用这个简单的代码根本不起作用: string middle = "eyJzdWIiOiJtYXR0d2ViZXIiLCJqdGkiOiJlMWVmNjc5Mi02YTBjLTQ4YWUtYmQzNi0wZDlmMTVlMDFiY2UiLCJpYXQiOjE0OTMwOTI0OTQsIm5iZiI6MTQ5MzA5MjQ5NCwiZXhwIjoxNDkzMjY1Mjk0LCJpc3MiOiJFQ29tbVdlYkFQSTIiLCJhdWQiOiJFQ29tbVdlYkNsaWVud

我的头撞在墙上,用这个简单的代码根本不起作用:

string middle = "eyJzdWIiOiJtYXR0d2ViZXIiLCJqdGkiOiJlMWVmNjc5Mi02YTBjLTQ4YWUtYmQzNi0wZDlmMTVlMDFiY2UiLCJpYXQiOjE0OTMwOTI0OTQsIm5iZiI6MTQ5MzA5MjQ5NCwiZXhwIjoxNDkzMjY1Mjk0LCJpc3MiOiJFQ29tbVdlYkFQSTIiLCJhdWQiOiJFQ29tbVdlYkNsaWVudDIifQ"

byte[] newBytes = Convert.FromBase64String(middle);
middle = Encoding.UTF8.GetString(newBytes);
就这么简单!但我在标题中发现了错误


而且,我在上面运行了这个程序,它可以完美地解码

由于您提供的字符串不完全符合
FromBase64String
方法接受值的标准,因此需要添加结束符号以遵循约定。它不会自动向
字符串添加结束符号

无值字符“=”用于尾随填充。s的结尾可以由零、一或两个填充字符组成

若要解决此问题,请在
字符串的末尾添加
“==”


例如:
string middle=“SomeString==”

解决您面临的异常:

    public static string Base64UrlDecode(this string base64)
    {
        string padded = base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '=');
        return Encoding.UTF8.GetString(Convert.FromBase64String(padded));
    }

所有的积分都归为此处接受的答案。

看看这个,一般情况下会有更多的积分,因为有时需要添加一个“=”而不是两个,有时输入字符串已经“很好”,没有任何填充。