using Flurl.Http;
using Serilog;
namespace TomNet.Http
{
/// <summary>
/// Flurl
/// </summary>
public static class FlurlHelper
{
/// <summary>
/// Flurl配置
/// </summary>
public static void FlurlConfigure()
{
FlurlHttp.Configure(settings =>
{
settings.Timeout = new TimeSpan(0, 0, 180);
settings.BeforeCallAsync = BeforeCallAsync;
settings.AfterCallAsync = AfterCallAsync;
settings.OnErrorAsync = OnErrorAsync;
});
}
/// <summary>
/// 请求前事件
/// </summary>
/// <returns></returns>
private static Task BeforeCallAsync(FlurlCall call)
{
Log.Information("FlurlCallBefore发起请求:{@call}", GetCallLog(call));
return Task.CompletedTask;
}
/// <summary>
/// 请求后事件
/// </summary>
/// <returns></returns>
private static Task AfterCallAsync(FlurlCall call)
{
if (call.Succeeded)
{
Log.Information("FlurlCallAfter请求返回:{@call}", GetCallLog(call));
}
else
{
Log.Error(call.Exception, "FlurlCallAfter请求返回失败:{@call}", GetCallLog(call));
}
return Task.CompletedTask;
}
/// <summary>
/// 异常事件
/// </summary>
/// <returns></returns>
private static Task OnErrorAsync(FlurlCall call)
{
Log.Error(call.Exception, "FlurlCallError请求异常{@call}", GetCallLog(call));
return Task.CompletedTask;
}
/// <summary>
/// 记录日志内容
/// </summary>
/// <param name="call"></param>
/// <returns></returns>
private static object GetCallLog(FlurlCall call)
{
return new
{
call.HttpRequestMessage.RequestUri?.OriginalString,
call.HttpRequestMessage.Method.Method,
call.RequestBody,
call.HttpRequestMessage.RequestUri?.Query,
ResponseData = call.HttpResponseMessage?.Content?.ReadAsStringAsync().Result
//ResponseData = call.Response?.GetStringAsync().Result//有问题不好使,一定不要用这个
};
}
}
}
FlurlHelper.FlurlConfigure();
在Program.cs启动文件中调用