using HttpClientStudy.Config; using Microsoft.Extensions.Options; using System.Net.Http.Json; namespace HttpClientStudy.Core { /// /// Http 错误处理 /// /// /// 常见方式 /// (仅个人见解) /// /// /// HtppClient 提供的状态码、EnsureSuccessStatusCode()等机制 /// (适用HttpClient内部错误) /// /// /// Try Catch 方式 /// (适用外部) /// /// /// HttpClient 管道 /// (统一处理) /// /// /// 使用 Polly 类库 /// (更多功能,也可结合HttpClient管道) /// /// /// /// /// 错误处理 /// public class HttpError { // 定义一个 HttpClient 共享实例 public static HttpClient HttpClient = new HttpClient(new SocketsHttpHandler() { PooledConnectionLifetime = TimeSpan.FromMinutes(1) }) { BaseAddress = new Uri(WebApiConfigManager.GetWebApiConfig().BaseUrl) }; /// /// 未知主机错误 /// /// public async Task UnknownHostAsync() { var response = await HttpClient.GetAsync("http://www.unknowhost_nonono.com/404.html"); return response.StatusCode; } /// /// 没有服务(WebApi服务未启动) /// /// public async Task NoServiceAsync() { try { var response = await HttpClient.GetAsync("http://localhost:30"); } catch (Exception ex) { // 捕获异常,处理 await Console.Out.WriteLineAsync(ex.Message ); throw; } return HttpStatusCode.OK; } /// /// 404错误 /// /// public async Task Http404Async() { var response = await HttpClient.GetAsync("/404.html"); return response.StatusCode; } /// /// 服务器错误 /// /// public async Task Http500Async() { var response = await HttpClient.GetAsync("/api/ErrorDemo/Error500"); return response.StatusCode; } } }