Class CurlHttpException
SendAsync(IHttpRequest, CancellationToken) 在网络/协议层面失败时抛出的异常。
public sealed class CurlHttpException : Exception, ISerializable
- Inheritance
-
CurlHttpException
- Implements
- Inherited Members
Remarks
本异常的适用范围:仅用于"libcurl 报告了错误"的场景 —— 连接/TLS/超时/协议错、 或 curl_multi_* 路径的返回码非 0。使用者应按 ErrorKind 做分支,不要 基于 CurlCode 的具体数值,后者只用于日志和排查。
不经过本异常的失败路径(故意区分开,不要混处理):
-
用户主动取消 CancellationToken 或在请求进行中
Dispose掉CurlHttpClient: 抛 OperationCanceledException。 -
用户写的流式上传
Stream.Read或下载DataCallback抛出的异常: 原样透传 (保留原始栈),根因在用户代码,不包装。 - 用法/编程错误(null 参数、已 Dispose 的 client、Body/BodyStream 互斥冲突等): 抛原生 ArgumentException / ObjectDisposedException / InvalidOperationException,反映这是 bug 而非运行时失败。
HTTP 4xx/5xx 不算失败。只要拿到了响应,SendAsync 就正常返回
IHttpResponse;业务侧靠 StatusCode 判断。
Properties
- CurlCode
libcurl 返回的原始数值,给日志/issue 排查用。多数场景下是 easy 层的
CURLcode, 但 SetupFailed 里发生在curl_multi_*路径时为CURLMcode。两者数值空间不同(如数值 2 在 easy 层是CURLE_FAILED_INIT, 在 multi 层是CURLM_OUT_OF_MEMORY),区分靠 ErrorKind。
- ErrorKind
语义化分类,做 switch/if 就读这个字段。