我试图从每个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
代码:(使用自定义记录器写入调试视图)
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
很抱歉发了这么多的邮件!耽误您时间,实在对不起!
发布于 2013-12-07 16:30:14
https://stackoverflow.com/questions/20435181
复制相似问题