如何处理 Dropbox C# SDK 中的错误?

23W*_*23W 3 c# dropbox dropbox-api

属性如何处理 Dropbox C# SDK 中的错误?

我想使用通用方法来处理来自不同 API 调用的错误。此方法应该在顶级应用程序级别和多个 API 调用中使用。对于大多数云 API(例如 Microsoft OneDrive 和 Google Drive API),我可以做到这一点,因为有严格定义的列表(枚举将包含所有错误代码)并且只有一个用于错误处理的异常类。但在 Dropbox C# SDK 中,一切都相反!没有任何错误代码列表,但有十几个异常类(一个异常模板Dropbox.Api.ApiException<T>和模板参数的大量错误对象T)。查找文件操作的错误类计数示例 - http://dropbox.github.io/dropbox-sdk-dotnet/html/N_Dropbox_Api_Files.htm

我勒个去!如何处理所有这些?写巨catch()块?

更糟糕的是,它们中的大多数都使用相同的错误类型!
例如,Dropbox.Api.Files.LookupError描述“未找到”、“格式错误的路径”等错误的类是21的一部分!其他错误类别。为了处理简单的“未找到”错误,我必须能够捕获两打异常!正常吗?

那么,属性如何处理 Dropbox C# SDK 中的错误呢?

Gre*_*reg 5

如果您想捕获任意 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
}
Run Code Online (Sandbox Code Playgroud)

下面是一个更完整的示例,展示了如何捕获特定异常,以及如何检查通常捕获的异常:

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
    }
}
Run Code Online (Sandbox Code Playgroud)