2.10异常处理(异常抑制)

在发起 HTTP 远程请求时,可能会遇到以下异常情况:

在发起 HTTP 远程请求时,可能会遇到以下异常情况:

  • 目标主机不可达
  • 请求被取消
  • 请求超时
  • 其他网络异常

默认情况下,这些异常会中断程序执行。为提升系统健壮性,框架提供以下异常处理方案:

1. 基础异常捕获(try/catch 模式)

cs
try{    var httpResponseMessage = httpRemoteService.SendAsync(HttpRequestBuilder.Post("https://furion.net/");}catch(Exception ex){    var httpResponseMessage = ex.GetResponseMessage();  // 可通过扩展获取 HttpResponseMessage? 对象    var requestDuration = ex.GetRequestDuration();  // 可通过扩展获取请求耗时(毫秒)    // 异常处理逻辑(如日志记录、降级处理)}

适用场景:需要精确控制异常处理逻辑时(如记录特定异常日志、执行补偿操作)。

2. 异常抑制(静默模式)

虽然开发者通常使用 try/catch 进行异常处理,但在某些场景下,我们更希望异常发生时静默返回 null 而不中断流程。为此,框架提供了灵活的异常抑制功能。

  • 抑制所有请求异常
cs
var httpResponseMessage = httpRemoteService.SendAsync(HttpRequestBuilder.Post("https://furion.net/")    .SuppressExceptions());  // 抑制所有异常

当请求发生异常时,代码不会中断,而是返回 null,即 httpResponseMessage 的值为 null

在某些场景下,我们希望在抑制异常的同时,仍能捕获异常信息(例如记录到日志中),而不中断程序的正常执行。此时,可以通过 SetOnRequestFailed 回调来实现:

cs
HttpRequestBuilder.Post("https://furion.net/")    .SuppressExceptions()    .SetOnRequestFailed((exception, responseMessage) =>     // 注意:responseMessage 可能为空    {        Console.WriteLine(exception.Message);    });

该方法允许你在异常被抑制后,安全地处理错误信息,适用于日志记录、监控或其他错误响应逻辑。

  • 仅抑制特定类型的异常

框架还支持仅抑制特定类型的异常。例如,可以仅抑制超时异常和请求取消异常:

cs
var httpResponseMessage = httpRemoteService.SendAsync(HttpRequestBuilder.Post("https://furion.net/")    .SuppressExceptions([typeof(TimeoutException), typeof(TaskCanceledException)]));  // 抑制超时和取消异常
  • 禁用异常抑制配置

若需恢复默认行为(即异常发生时中断程序),可显式禁用异常抑制:

cs
var httpResponseMessage = httpRemoteService.SendAsync(HttpRequestBuilder.Post("https://furion.net/")    .SuppressExceptions(false);  // 恢复缺省配置

此配置等效于未调用 SuppressExceptions(),当发生任何异常时,程序将中断执行。