【问题标题】:.NET Gmail Api. Input is not a valid base64.NET Gmail API。输入不是有效的 base64
【发布时间】:2018-04-02 14:04:31
【问题描述】:

虽然这看起来很容易解决,但由于某种原因,我的 .net 应用程序根本不认为这是一个有效的 base64 字符串。

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

抛出异常:mscorlib.dll 中的“System.FormatException”
System.FormatException:输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符, 或填充字符中的非法字符。
在 System.Convert.FromBase64_ComputeResultLength(Char* inputPtr, Int32 inputLength)
在 System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength)
在 System.Convert.FromBase64String(String s)
在 wForm.Form1.d__9.MoveNext() 中 E:\Programs\Programming\wForms\wForm\wForm\Form1.cs:line 127

这是编码字符串(在其他应用程序中可以很好地解码,例如实用程序信息网站): https://pastebin.ca/3893521

我用于加载 windows 窗体并获取这些消息的代码:

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”上

我尝试在这个论坛中搜索类似的问题,但是,他们的解决方案似乎都没有奏效,因为他们中的大多数只是将 - 和 _ 符号更改为适合 base64url 类型的符号。

【问题讨论】:

    标签: c# .net api gmail


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-10
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多