首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google.Apis.Email_Migration_v2

Google.Apis.Email_Migration_v2
EN

Stack Overflow用户
提问于 2013-12-06 23:05:35
回答 1查看 792关注 0票数 0

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

为了强制“糟糕的请求错误400”,我只是在MailResource.InsertMediaUpload的构造函数中提供了一个无效的用户键(电子邮件)。

例如MailResource.InsertMediaUpload(mailItem,mailItem流,“message/rfc822 822”)

问题

1) GoogleApiException.HttpStatusCode总是0(不可用)。即使Exception.Message在括号中似乎包含状态代码。例如400

2)找不到GoogleApiRequestException。

问题

1)执行指数后退算法的最佳方法是什么?

2)在这种情况下,这是否该财产的预期行为?

3) GoogleApiRequestException是否仍然存在,如果是的话,在哪里?

边注:

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

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

以前:http://code.google.com/p/google-api-dotnet-client/source/browse/Src/GoogleApis/GoogleApiException.cs?r=a8e27790f8769c1d6aaae030bb46c79daa7cdbad

后:http://code.google.com/p/google-api-dotnet-client/source/browse/Src/GoogleApis/GoogleApiException.cs?r=d6f06e92d90b635c179013e2c287b42b82909c09

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

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

代码:(使用自定义记录器写入调试视图)

代码语言:javascript
复制
    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!");
        }
    }

输出片段

五二二四 VSLLC:例外!类型: Google.GoogleApiException

五二二四 VSLLC: GoogleApiException-> Message: Google.Apis.Requests.RequestError

5224不良请求400

5224个错误[

5224 MessageBad请求位置- ReasonbadRequest Domainglobal

5224 ]

五二二四 VSLLC: GoogleApiException-> 状态代码: 0

五二二四 VSLLC:上传完成.状态:失败异常?:服务管理员抛出了一个异常: Google.GoogleApiException: Google.Apis.Requests.RequestError

5224不良请求400

5224个错误[

5224 MessageBad请求位置- ReasonbadRequest Domainglobal

5224 ]

五二二四

5224在Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task任务)

5224在Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task任务)

5224在Microsoft.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task任务)

5224在Google.Apis.Upload.ResumableUpload`1.d__0.MoveNext() in c:\code\google.com\google-api-dotnet-client\default\Tools\Google.Apis.Release\bin\Debug\output\default\Src\GoogleApis\ApisMedia\Upload\ResumableUpload.cs:line 373

很抱歉发了这么多的邮件!耽误您时间,实在对不起!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-07 16:30:14

  1. 该库已经支持503个响应的指数备份。在400 (坏请求)的情况下,您不应该重试,因为您将得到相同的响应一次又一次。查看一下服务初始化器参数DefaultExponentialBackOffPolicy,也可以查看我们的ExponentialBackOff实现BackOffHandler封装逻辑并实现不成功的响应处理程序和异常处理程序。
  2. GoogleApiRequest已经不存在了。
  3. 看起来我们没有正确地设置状态代码,因为您可以找到这里。我打开一个新的问题,在我们的问题跟踪器,可在这里- https://code.google.com/p/google-api-dotnet-client/issues/detail?id=425。可以自由地给它添加更多的内容。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20435181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档