You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
2.9 KiB
C#

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