Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Javascript atob(str)在c中等效#_C#_Javascript - Fatal编程技术网

C# Javascript atob(str)在c中等效#

C# Javascript atob(str)在c中等效#,c#,javascript,C#,Javascript,我这样做: byte[] data = Convert.FromBase64String(str); string decodedString = Encoding.UTF8.GetString(data); Console.WriteLine(decodedString); 但是得到了未处理的异常:System.FormatException:Base-64字符数组或字符串的长度无效。 在javascript中,使用atob(str)可以得到正确的解码str javascript控制台

我这样做:

 byte[] data = Convert.FromBase64String(str);
 string decodedString = Encoding.UTF8.GetString(data);
 Console.WriteLine(decodedString);
但是得到了
未处理的异常:System.FormatException:Base-64字符数组或字符串的长度无效。

在javascript中,使用
atob(str)
可以得到正确的解码str

javascript控制台:

atob("eyJpc3MiOiJodHRwczovL2lkZW50aXR5LXN0YWdpbmcuYXNjZW5kLnh5eiIsImF1ZCI6Imh0dHBzOi8vaWRlbnRpdHktc3RhZ2luZy5hc2NlbmQueHl6L3Jlc291cmNlcyIsImNsaWVudF9pZCI6IjY5OTRBNEE4LTBFNjUtNEZFRC1BODJCLUM2ODRBMEREMTc1OCIsInNjb3BlIjpbIm9wZW5pZCIsInByb2ZpbGUiLCJzdWIucmVhZCIsImRhdGEud3JpdGUiLCJkYXRhLnJlYWQiLCJhbGcuZXhlY3V0ZSJdLCJzdWIiOiIzNzdjMDk1Yi03ODNiLTQ3ZTctOTdiMS01YWVkOThjMDM4ZmMiLCJhbXIiOiJleHRlcm5hbCIsImF1dGhfdGltZSI6MTQwNzYxNTUwNywiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMDg0MGM3NjAtNmY3Yi00NTU2LWIzMzctOGMwOTBlMmQ0NThkLyIsIm5hbWUiOiJwa3NAYXNjZW5kLnh5eiIsImV4cCI6MTQwNzgzNjcxMSwibmJmIjoxNDA3ODMzMTExfQ")
"{"iss":"https://identity-staging.ascend.xyz","aud":"https://identity-staging.ascend.xyz/resources","client_id":"6994A4A8-0E65-4FED-A82B-C684A0DD1758","scope":["openid","profile","sub.read","data.write","data.read","alg.execute"],"sub":"377c095b-783b-47e7-97b1-5aed98c038fc","amr":"external","auth_time":1407615507,"idp":"https://sts.windows.net/0840c760-6f7b-4556-b337-8c090e2d458d/","name":"pks@ascend.xyz","exp":1407836711,"nbf":1407833111}"

在c#

中解决了这个问题。使用javascript的window.btoa函数在javascript前端UI中以Base 64格式对字符串进行编码。要在C#(相当于javascript的window.atob函数)中解码回相同的字符串,请参阅以下代码

(很可能您正试图将数据(大多数情况下是HTML,因为它需要btoa编码以确保最佳兼容性))发回控制器,或者您可能正在服务器端创建自定义基本身份验证筛选器)


您可以在

什么是零件?一个字符串数组?我将更新这个问题以省去它。是的,这是一个数组。部分[1]与我在javascript中测试的字符串是同一个字符串,该字符串是如何定义的,你确定该字符串已正确转义吗?我只是将我在javascript中测试的同一字符串复制粘贴到c#代码中。str=“my_jwt_token”;将再次更新问题以显示代码我是否需要在编码和解码方面都使用此选项?或者只是解码?只是为了解码,这是因为base64字符串可以省略结尾处的==,但是c#期望长度可以被4整除(因此结尾处经常是==)。这修复了一个损坏的编码输入字符串,如FC4WMDI0MDIYNTCzrirxalxHhlmzMX,并将其转换为有效的编码FC4WMDI0MDIYNTCzrirxalxHhlmzMX==。现在我可以使用
System.Text.Encoding.UTF8.GetString(System.Convert.FromBase64String(encoedString))
    var str = "eyJpc3MiOiJodHRwczovL2lkZW50aXR5LXN0YWdpbmcuYXNjZW5kLnh5eiIsImF1ZCI6Imh0dHBzOi8vaWRlbnRpdHktc3RhZ2luZy5hc2NlbmQueHl6L3Jlc291cmNlcyIsImNsaWVudF9pZCI6IjY5OTRBNEE4LTBFNjUtNEZFRC1BODJCLUM2ODRBMEREMTc1OCIsInNjb3BlIjpbIm9wZW5pZCIsInByb2ZpbGUiLCJzdWIucmVhZCIsImRhdGEud3JpdGUiLCJkYXRhLnJlYWQiLCJhbGcuZXhlY3V0ZSJdLCJzdWIiOiIzNzdjMDk1Yi03ODNiLTQ3ZTctOTdiMS01YWVkOThjMDM4ZmMiLCJhbXIiOiJleHRlcm5hbCIsImF1dGhfdGltZSI6MTQwNzYxNTUwNywiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMDg0MGM3NjAtNmY3Yi00NTU2LWIzMzctOGMwOTBlMmQ0NThkLyIsIm5hbWUiOiJwa3NAYXNjZW5kLnh5eiIsImV4cCI6MTQwNzgzNjcxMSwibmJmIjoxNDA3ODMzMTExfQ";
    int mod4 = str.Length % 4;
    if (mod4 > 0)
    {
        str += new string('=', 4 - mod4);
    }
string base64Encoded = "YmFzZTY0IGVuY29kZWQgc3RyaW5n";
string base64Decoded;
byte[] data = System.Convert.FromBase64String(base64Encoded);
base64Decoded = System.Text.ASCIIEncoding.ASCII.GetString(data);
Console.WriteLine(base64Decoded)