using HttpClientStudy.Config; using Microsoft.Extensions.Options; namespace HttpClientStudy.Core { /// /// Http 错误处理 /// /// /// 常见方式 /// (仅个人见解) /// /// /// HtppClient 提供的状态码、EnsureSuccessStatusCode()等机制 /// (适用HttpClient内部错误) /// /// /// Try Catch 方式 /// (适用外部) /// /// /// 使用 Polly 类库 /// (更多功能) /// /// /// /// /// 简化处理 /// 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; } /// /// 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; } } }