本文介绍使用 TOS SDK 时的异常处理。
TOS 服务端遵循 HTTP 规范,对于请求失败的场景定义了详细的 HTTP 状态码和业务错误码。详细内容,请参见 TOS 服务端状态码和错误码定义。
TosClientError 是客户端输入参数有误、连接超时或客户端执行取消断点续传上传等特殊操作引起的。例如使用 CreateBucket 创建桶时,如果桶名字符长度大于 63 个字符则返回异常。
通过 TOS .NET SDK 接口向 TOS 服务端发送请求,请求响应中会包含遵循 HTTP 规范的状态码和业务错误码,用于标识当前请求的响应状态。
以下代码展示了下载一个不存在的对象时的异常处理,若为 TosServerError 异常则打印异常信息、HTTP 请求状态码、请求 ID;若为 TosClientError 异常则打印异常信息与引起错误的原因。
using System; using System.IO; using TOS; using TOS.Error; using TOS.Model; namespace ConsoleApp { internal class Program { private static void Main(string[] args) { var ak = Environment.GetEnvironmentVariable("TOS_ACCESS_KEY"); var sk = Environment.GetEnvironmentVariable("TOS_SECRET_KEY"); // endpoint 若没有指定HTTP协议(HTTP/HTTPS),默认使用 HTTPS // Bucket 的 Endpoint,以华北2(北京)为例:https://tos-cn-beijing.volces.com var endpoint = "https://tos-cn-beijing.volces.com"; var region = "cn-beijing"; // 填写 BucketName var bucketName = "*** Provide your bucket name ***"; // 下载对象 var objectKey = "example_dir/example.txt"; // 创建TOSClient实例 var client = TosClientBuilder.Builder().SetAk(ak).SetSk(sk).SetEndpoint(endpoint).SetRegion(region).Build(); try { var getObjectInput = new GetObjectInput() { Bucket = bucketName, Key = objectKey, }; var getObjectOutput = client.GetObject(getObjectInput); Console.WriteLine("GetObject succeeded, request id {0}", getObjectOutput.RequestID); // 下载数据大小 Console.WriteLine("GetObject succeeded, content length {0}", getObjectOutput.ContentLength); // 完成下载 using (var reader = new StreamReader(getObjectOutput.Content)) { Console.WriteLine("GetObject succeeded, content {0}", reader.ReadToEnd()); getObjectOutput.Content.Close(); } } catch (TosServerException ex) { // 不存在的对象时的异常处理 if (ex.StatusCode == 404) { Console.WriteLine("GetObject failed, object not exist"); } Console.WriteLine("GetObject failed, request id {0}", ex.RequestID); Console.WriteLine("GetObject failed, status code {0}", ex.StatusCode); Console.WriteLine("GetObject failed, response error code {0}", ex.Code); Console.WriteLine("GetObject failed, response error message {0}", ex.Message); } catch (TosClientException ex) { Console.WriteLine("GetObject failed, error message {0}", ex.Message); } catch (Exception ex) { Console.WriteLine("GetObject failed, {0}", ex.Message); } } } }