using HttpClientStudy.Config;
using Microsoft.Extensions.Options;
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;
}
}
}