当前位置: 首页 > 知识库问答 >
问题:

.NET Gmail API。输入不是有效的base64

邢运良
2023-03-14

尽管这似乎很容易修复,但由于某种原因,我的.NET应用程序根本不将其视为有效的base64字符串。

我正在使用GMail API来获取消息,在我试图检索正文的最后一部分,我遇到了以下错误消息:

private async void Form1_Load(object sender, EventArgs e)
{
    txtEmail_ID.Focus();
    try
    {
        requestLabel = service.Users.Labels.List("me");
        requestMessage = service.Users.Messages.List("me");
        //requestMessage.LabelIds = "INBOX";
        //requestMessage.IncludeSpamTrash = false;
        // requestMessage.Q = "is:unread";

        var messageResponse = await requestMessage.ExecuteAsync();
        if (messageResponse != null && messageResponse.Messages != null)
        {
            foreach (var message in messageResponse.Messages)
            {
                var currentMessage = new messageInfo();
                var requestNestedMessage = service.Users.Messages.Get("me", message.Id);
                var nestedMessageResponse = await requestNestedMessage.ExecuteAsync();

                if (nestedMessageResponse != null) // Check if we have nested params
                {
                    foreach (var mParts in nestedMessageResponse.Payload.Headers) // Loop msg headers
                    {
                        if (mParts.Name == "Date")
                        {
                            currentMessage.msgDate = mParts.Value; // Get msg date
                        }
                        else if (mParts.Name == "From")
                        {
                            currentMessage.msgSender = mParts.Value; // Get msg sender
                        }
                        else if (mParts.Name == "Subject")
                        {
                            currentMessage.msgTitle = mParts.Value; // Get msg subject
                        }
                    }
                    if (nestedMessageResponse.Payload.Parts == null && nestedMessageResponse.Payload.Body != null)
                    {
                        currentMessage.msgBody = nestedMessageResponse.Payload.Body.Data;
                    }
                    else
                    {
                        currentMessage.msgBody = returnNestedParts(nestedMessageResponse.Payload.Parts, "");
                    }

                    Console.WriteLine(currentMessage.msgSender);
                    String codedString = currentMessage.msgBody.Replace("-", "+");
                    codedString = codedString.Replace("_", "/");

                    byte[] data = Convert.FromBase64String(codedString);
                    currentMessage.msgBody = Encoding.UTF8.GetString(data);
                    mInfo.Add(currentMessage);
                }
            }
        }
    } catch (Exception ex)
    {
        Console.WriteLine(ex);
    }
    //comboFolders.SelectedIndex = 0;
}

程序对它所获取的每条消息抛出异常,“第127行”位于“byte[]data”上。

我尝试在这个论坛中搜索类似的问题,但是,他们的解决方案似乎都不起作用,因为大多数人只是提供了将-and_符号更改为适合base64url类型的符号。

共有1个答案

慕铭
2023-03-14

我已经解决了这个问题,缩小到有效载荷部分。当我想将消息的两个有效负载部分连接在一起时,就会出现错误,使尾随的'='符号无法处理,从而迫使自己出现异常

 类似资料:
  • 我正面临一个奇怪的问题,几乎花了4个小时没有运气。 我有一个简单的Web API,我正在表单提交时调用它。 API- HTML- 当我点击提交按钮时,我得到以下错误- 启动类中的配置- 这只发生在POST请求中。GET request工作正常。在邮递员REST客户端中测试时也会出现同样的问题。有什么需要帮忙的吗?如果我能提供更多的细节,请让我知道。

  • 我目前正在尝试为一个我为好玩而开发的网站创建一个登录/创建帐户页面。在创建帐户表单中,我有一个用户名、姓名、电子邮件、密码和验证密码的输入字段。我在输入字段中也有模式,以便用户生成有效的帐户信息。以下为表格: 澄清:用户名模式要求您的用户名只有大写和小写字母和数字,并且必须至少包含5个字符,最多包含40个字符。电子邮件要求您输入有效的电子邮件地址模式。密码要求至少包含8个字符,并且必须包含大小写字

  • 这是我为CS类制作的文本冒险游戏的一小部分。你正在探索一座房子,你通过告诉游戏你想去北、南、东还是西来导航它 因此,我想添加一些内容,以便在输入无效输入时告诉您,如果您说拼写错误的单词,如Nroth、Suoth、Eas或Weast。这些只是例子,但希望你们知道我的意思,只要它不完全匹配北,南,东或西。在这段代码中,我将如何做到这一点? 我举了一个错误的例子,如果你在写“elif room==”的地

  • 我试图从包含日期列的.xlsx电子表格中导入数据。在这些列中,日期以DD-MON-YY格式显示(例如:20-aug-12)。 编辑:我的约会语言匹配器设置为“法语”。我可以改成“美国”吗?

  • 有一个M x N(M, N 我试图解决它,但找不到可能的解决办法。现在,我想知道解决这个问题的有效算法。 exam1) 给定一个5x3矩阵作为问题输入, 'o'- o o o x o x o o o x o x o o 回答)油漆的最小数量为5<绘制(0,0…0,2) 绘制(2,0…2,2) 绘制(4,0…4,2) 绘制(1,1) 绘制(3,1) 给定一个3x3矩阵, o x o o o o x

  • 名称只包含字母、连字符“-”和空格“” 第一个字母应为大写字母。 空白或连字符后应紧跟大写字母。 例如,程序只应接受以下表格: “name”或“firstname-secondname”或“firstname secondname”。 我的Java代码: 有人能帮忙吗?