Google api Google.api.Email\u迁移\u v2

Google api Google.api.Email\u迁移\u v2,google-api,google-api-dotnet-client,google-email-migration,Google Api,Google Api Dotnet Client,Google Email Migration,我正在尝试从每个UploadAsync方法调用中检索HttpStatusCode。我需要状态代码,以便正确执行指数退避算法,重试失败的上载,在不重试上载时向用户显示错误消息,并报告上载成功。我不在乎它是如何接收的,只要它是干净的,并且没有从Exception.Message(string)属性解析,就像下面提供的链接中建议的Tor Jonsson一样 为了强制执行“错误请求错误[400]”,我只是在MailResource.InsertMediaUpload的构造函数中提供了一个无效的用户密钥(

我正在尝试从每个UploadAsync方法调用中检索HttpStatusCode。我需要状态代码,以便正确执行指数退避算法,重试失败的上载,在不重试上载时向用户显示错误消息,并报告上载成功。我不在乎它是如何接收的,只要它是干净的,并且没有从Exception.Message(string)属性解析,就像下面提供的链接中建议的Tor Jonsson一样

为了强制执行“错误请求错误[400]”,我只是在MailResource.InsertMediaUpload的构造函数中提供了一个无效的用户密钥(电子邮件)
e、 g.MailResource.InsertMediaUpload(mailItem,)invalidEmail@domain.com“,流,“消息/rfc822”)

问题

1) GoogleApiException.HttpStatusCode始终为0(不可用)。即使Exception.Message在括号中似乎包含状态代码。e、 g[400]
2) 找不到GoogleAppRequestException

问题
1) 执行指数退避算法的最佳方法是什么
2) 在这种情况下,这是该属性的预期行为吗
3) GoogleApiRequestException是否仍然存在,如果存在,在哪里

旁注:
我还注意到GoogleApiRequestException类不再与GoogleApiException类位于同一个文件中。它是否已移动到另一个命名空间或已删除?因为我想尝试捕获一个GoogleAppirequestException对象并获取它的RequestError对象

我为我的意思添加了两个差异的链接:

之前:

之后:

来源

我使用的是来自NuGet的最新二进制文件(1.6.0.8-beta)

我发现的唯一问题与我的问题有关:(只能发布两个链接…这里是原始链接) stackoverflow.com/questions/18985306/httpstatuscode-not-set-in-exceptions-when-use-google-net-api

代码:(使用自定义记录器写入debugview)

输出片段
[5224](T101)VSLLC:例外!!!类型:Google.GoogleApiException
[5224](T101)VSLLC:GoogleApiException->Message:Google.api.Requests.RequestError
[5224]错误请求[400]
[5224]错误[
[5224]消息[错误请求]位置[-]原因[错误请求]域[全局]
[5224]]
[5224](T101)VSLLC:GoogleApiException->状态代码:0
[5224](T101)VSLLC:上载已完成。。。状态:失败的异常?:服务管理员引发了一个异常:Google.GoogleAppeException:Google.API.Requests.RequestError
[5224]错误请求[400]
[5224]错误[
[5224]消息[错误请求]位置[-]原因[错误请求]域[全局]
[5224]]
[5224]
[5224]在Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)上运行
[5224]在Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(任务任务)上运行
[5224]在Microsoft.Runtime.CompilerServices.TaskWaiter.ValidateEnd(任务任务)上运行
[5224]在c:\code\Google.com\Google api dotnet client\default\Tools\Google.api.Release\bin\Debug\output\default\Src\GoogleApis\api[Media]\Upload\ResumableUpload.cs中的Google.api.Upload.ResumableUpload`1.d\uu 0.MoveNext()中

对不起,我的帖子太多了!谢谢你的时间

  • 该库已经支持503响应的指数回退。在400(错误请求)的情况下,您不应该重试,因为您将一次又一次地得到相同的响应。 查看服务初始值设定项参数 你也可以看看我们的网站。包装逻辑并实现不成功的响应处理程序和异常处理程序
  • GoogleApiRequest已经不存在了
  • 您可以发现,我们似乎没有正确设置状态代码。我在我们的问题追踪器中打开了一个新问题,可在此处找到-。请随意添加更多内容

  • 谢谢你的洞察力,这回答了我此刻需要知道的一切。如果还有其他问题,我会发布一个新问题或发表评论。还是个新手,不知道协议是什么。
        public int Index; // Used to Id the process
        private void TryUpload(MailResource.InsertMediaUpload upload, out IUploadProgress uploadProgress, out bool retryUpload)
        {
            uploadProgress = null;
            retryUpload = false;
            CancellationToken token;
    
            try
            {
                uploadProgress = upload.UploadAsync(token).Result;
    
                if (uploadProgress.Exception != null)
                {
                    _logger.WriteTrace("EXCEPTION!!! Type: {0}", uploadProgress.Exception.GetType().ToString()); // Remove:
    
                    // *) Handle all of the various exceptions
                    if (uploadProgress.Exception is JsonReaderException)
                    {
                        JsonReaderException jreEx = uploadProgress.Exception as JsonReaderException;
                        _logger.WriteTrace("JsonReaderException-> Message: {0}", jreEx.Message);
                    }
    
                    if (uploadProgress.Exception is TokenResponseException)
                    {
                        TokenErrorResponse trEx = uploadProgress as TokenErrorResponse;
                        _logger.WriteTrace("TokenErrorResponse-> Message: {0}", trEx.Error);
                    }
    
                    if (uploadProgress.Exception is HttpRequestValidationException)
                    {
                        HttpRequestValidationException hrvEx = uploadProgress.Exception as HttpRequestValidationException;
                        _logger.WriteTrace("HttpRequestValidationException-> Message: {0}", hrvEx.Message);
                        _logger.WriteTrace("HttpRequestValidationException-> Status Code: {0}", hrvEx.GetHttpCode());
                    }
    
                    if (uploadProgress.Exception is GoogleApiException)
                    {
                        GoogleApiException gApiEx = uploadProgress.Exception as GoogleApiException;
                        _logger.WriteTrace("GoogleApiException-> Message: {0}", gApiEx.Message);
                        _logger.WriteTrace("GoogleApiException-> Status Code: {0}", gApiEx.HttpStatusCode);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.WriteTrace(ex, "An exception occured while uploading...");
            }
            finally
            {
                if (uploadProgress != null)
                    _logger.WriteTrace("Upload Completed... Status: {0} Exception?: {1}", 
                        uploadProgress.Status, 
                        (uploadProgress.Exception == null) ? "None" : uploadProgress.Exception.ToString());
                else
                    _logger.WriteTrace("Upload Aborted... Exited without returning a status!");
            }
        }