using Flurl.Http;
using IMCS.CCS.Entitys;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
namespace IMCS.CCS.Service.Impl
{
///
/// WebApi 请求服务
///
public class ApiRequestService : IApiRequestService
{
private readonly ILogger _logger;
public ApiRequestService(ILogger logger)
{
_logger = logger;
}
///
/// 请求数据
///
///
///
///
///
public async Task<(bool IsSuccess, string Message)> RequestAsync(RequsetModeEnum requsetMode, string apiUrl, object obj, string headerKeyValue = null)
{
try
{
var headerKey = "IMCS_CCS.Job.Request";
var headerValue = "Success";
if (!string.IsNullOrWhiteSpace(headerKeyValue) && headerKeyValue.Contains("="))
{
headerKey = headerKeyValue.Split('=')[0];
headerValue = headerKeyValue.Split('=')[1];
}
IFlurlRequest flurlRequest = apiUrl.WithHeader(headerKey, headerValue).WithTimeout(8) ;
if (flurlRequest == null)
{
return (false, "flurlRequest 空指针!");
}
IFlurlResponse flurResponse = default;
if (requsetMode == RequsetModeEnum.Delete)
{
flurResponse = await flurlRequest.DeleteAsync();
}
if (requsetMode == RequsetModeEnum.Post)
{
if(obj == null)
{
flurResponse = await flurlRequest.PostAsync();
}
else
{
flurResponse = await apiUrl.PostJsonAsync(obj);
}
}
if (requsetMode == RequsetModeEnum.Get)
{
flurResponse = await flurlRequest.GetAsync();
}
if (flurResponse == null)
{
return (false, "flurResponse 空指针!");
}
var result = await flurResponse.GetStringAsync();
if (string.IsNullOrWhiteSpace(result))
{
return (false, "result 空指针!");
}
return (true, result);
}
catch (Exception ex)
{
_logger.LogError(ex, $"接口请求异常【ApiRequestService 》RequestAsync】:{ex.Message}");
return (false, ex.Message);
}
}
}
}