如何处理 Dropbox C# SDK 中的错误?
How to handle error in Dropbox C# SDK?
如何属性处理 Dropbox C# SDK 中的错误?
我想使用通用方法来处理来自不同 API 调用的错误。此方法应在顶级应用级别和连续 API 调用中使用。对于大多数云 API(如 Microsoft OneDrive 和 Google Drive API)我可以做到,因为有严格定义的列表(枚举将所有错误代码)并且只有一个例外 class 用于错误处理。
但在 Dropbox C# SDK 中,一切都是相反的!没有任何错误代码列表,但有十几个异常 class(一个异常模板 Dropbox.Api.ApiException<T>
和 T
模板参数的大量错误对象)。查找文件操作错误计数 classes 的示例 - http://dropbox.github.io/dropbox-sdk-dotnet/html/N_Dropbox_Api_Files.htm
什么鬼!如何处理所有这些?写巨型 catch()
块 ?
更糟糕的是,它们中的大多数使用相同的错误类型!
例如,class Dropbox.Api.Files.LookupError
描述 "Not found"、"Malformed Path" 等错误是 21 的一部分!其他错误 classes。为了处理简单的 "Not found" 错误,我必须能够捕获两打异常!正常吗?
那么,属性 如何处理 Dropbox C# SDK 中的错误?
如果您想捕获任意 Dropbox 异常,而不是处理特定异常,您可以捕获父类型 DropboxException
,如下所示:
try {
var account = await this.client.Users.GetCurrentAccountAsync();
// use account
} catch (DropboxException ex) {
// inspect and handle ex as desired
}
try {
var list = await client.Files.ListFolderAsync(string.Empty);
// use list
} catch (DropboxException ex) {
// inspect and handle ex as desired
}
try {
var download = await client.Files.DownloadAsync(path);
// use download
} catch (DropboxException ex) {
// inspect and handle ex as desired
}
下面是一个更完整的示例,展示了如何捕获特定异常,以及如何检查一般捕获的异常:
try {
var list = await client.Files.ListFolderAsync(string.Empty);
// use list
} catch (ApiException<Dropbox.Api.Files.ListFolderError> ex) {
// handle ListFolder-specific error
} catch (DropboxException ex) {
// inspect and handle ex as desired
if (ex is AuthException) {
// handle AuthException, which can happen on any call
if (((AuthException)ex).ErrorResponse.IsInvalidAccessToken) {
// handle invalid access token case
}
} else if (ex is HttpException) {
// handle HttpException, which can happen on any call
}
}
如何属性处理 Dropbox C# SDK 中的错误?
我想使用通用方法来处理来自不同 API 调用的错误。此方法应在顶级应用级别和连续 API 调用中使用。对于大多数云 API(如 Microsoft OneDrive 和 Google Drive API)我可以做到,因为有严格定义的列表(枚举将所有错误代码)并且只有一个例外 class 用于错误处理。
但在 Dropbox C# SDK 中,一切都是相反的!没有任何错误代码列表,但有十几个异常 class(一个异常模板 Dropbox.Api.ApiException<T>
和 T
模板参数的大量错误对象)。查找文件操作错误计数 classes 的示例 - http://dropbox.github.io/dropbox-sdk-dotnet/html/N_Dropbox_Api_Files.htm
什么鬼!如何处理所有这些?写巨型 catch()
块 ?
更糟糕的是,它们中的大多数使用相同的错误类型!
例如,class Dropbox.Api.Files.LookupError
描述 "Not found"、"Malformed Path" 等错误是 21 的一部分!其他错误 classes。为了处理简单的 "Not found" 错误,我必须能够捕获两打异常!正常吗?
那么,属性 如何处理 Dropbox C# SDK 中的错误?
如果您想捕获任意 Dropbox 异常,而不是处理特定异常,您可以捕获父类型 DropboxException
,如下所示:
try {
var account = await this.client.Users.GetCurrentAccountAsync();
// use account
} catch (DropboxException ex) {
// inspect and handle ex as desired
}
try {
var list = await client.Files.ListFolderAsync(string.Empty);
// use list
} catch (DropboxException ex) {
// inspect and handle ex as desired
}
try {
var download = await client.Files.DownloadAsync(path);
// use download
} catch (DropboxException ex) {
// inspect and handle ex as desired
}
下面是一个更完整的示例,展示了如何捕获特定异常,以及如何检查一般捕获的异常:
try {
var list = await client.Files.ListFolderAsync(string.Empty);
// use list
} catch (ApiException<Dropbox.Api.Files.ListFolderError> ex) {
// handle ListFolder-specific error
} catch (DropboxException ex) {
// inspect and handle ex as desired
if (ex is AuthException) {
// handle AuthException, which can happen on any call
if (((AuthException)ex).ErrorResponse.IsInvalidAccessToken) {
// handle invalid access token case
}
} else if (ex is HttpException) {
// handle HttpException, which can happen on any call
}
}