You need to enable JavaScript to run this app.
导航

异常处理(.NET SDK)

最近更新时间2024.02.04 18:31:08

首次发布时间2023.08.24 14:41:47

本文介绍使用 TOS SDK 时的异常处理。

TOS 服务端错误

TOS 服务端遵循 HTTP 规范,对于请求失败的场景定义了详细的 HTTP 状态码和业务错误码。详细内容,请参见 TOS 服务端状态码和错误码定义

SDK 自定义异常

客户端异常 - TosClientError

TosClientError 是客户端输入参数有误、连接超时或客户端执行取消断点续传上传等特殊操作引起的。例如使用 CreateBucket 创建桶时,如果桶名字符长度大于 63 个字符则返回异常。

服务端异常 - TosServerError

通过 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);
            }
        }
    }
}