using Newtonsoft.Json; using Quartz; using System; using System.Collections.Generic; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Web; using Utility.Tools; using Utility.Entity; using Serilog; using Talk.Extensions; namespace Utility.Job { public class HttpJob : JobBase, IJob { public HttpJob() : base(new LogUrlModel()) { } public override async Task NextExecute(IJobExecutionContext context) { //获取相关参数 var requestUrl = context.JobDetail.JobDataMap.GetString(Constant.REQUESTURL)?.Trim(); requestUrl = requestUrl?.IndexOf("http") == 0 ? requestUrl : "http://" + requestUrl; var requestParameters = context.JobDetail.JobDataMap.GetString(Constant.REQUESTPARAMETERS); var headersString = context.JobDetail.JobDataMap.GetString(Constant.HEADERS); var headers = headersString != null ? JsonConvert.DeserializeObject>(headersString?.Trim()) : null; var requestType = (RequestTypeEnum)int.Parse(context.JobDetail.JobDataMap.GetString(Constant.REQUESTTYPE)); LogInfo.Url = requestUrl; LogInfo.RequestType = requestType.ToString(); LogInfo.Parameters = requestParameters; HttpResponseMessage response = new HttpResponseMessage(); var http = HttpHelper.Instance; switch (requestType) { case RequestTypeEnum.Get: response = await http.GetAsync(requestUrl, headers); break; case RequestTypeEnum.Post: response = await http.PostAsync(requestUrl, requestParameters, headers); break; case RequestTypeEnum.Put: response = await http.PutAsync(requestUrl, requestParameters, headers); break; case RequestTypeEnum.Delete: response = await http.DeleteAsync(requestUrl, headers); break; } var result = HttpUtility.HtmlEncode(await response.Content.ReadAsStringAsync()); LogInfo.Result = $"{result.MaxLeft(1000)}"; if (!response.IsSuccessStatusCode) { LogInfo.ErrorMsg = $"{result.MaxLeft(3000)}"; context.JobDetail.JobDataMap[Constant.EXCEPTION] = $"
{LogInfo.BeginTime}
{JsonConvert.SerializeObject(LogInfo)}"; } else { //这里需要和请求方约定好返回结果约定为HttpResultModel模型 var httpResult = JsonConvert.DeserializeObject(HttpUtility.HtmlDecode(result)); if (!httpResult.IsSuccess) { LogInfo.ErrorMsg = $"{httpResult.ErrorMsg}"; context.JobDetail.JobDataMap[Constant.EXCEPTION] = $"
{LogInfo.BeginTime}
{JsonConvert.SerializeObject(LogInfo)}"; } } } } /// /// Job任务结果 /// public class HttpResultModel { /// /// 请求是否成功 /// public bool IsSuccess { get; set; } = true; /// /// 异常消息 /// public string ErrorMsg { get; set; } } }