ABP.net core調用第三方接口 接入方式

1、在appsettings.json中配置第三方應用服務地址
“OtherServerConfig”: {
“ApplicationServerUrl”: “http://192.168.199.111:8017”, //第三方應用服務地址
}
2、Startup.cs文件中配置
代碼:

  services.AddHttpClient("OtherApplicationServer", c =>
            {
                c.BaseAddress = new Uri(_appConfiguration["OtherServerConfig:ApplicationServerUrl"]);//地址從配置文件appsettings.json裏取
                c.Timeout = TimeSpan.FromSeconds(30);//超時間時間設置爲30秒
            });

在這裏插入圖片描述
3、客戶端請求封裝接口
參考下圖,
第一步:創建接口類:IOtherHttpClient
代碼如下:

 /// <summary>
    /// 客戶端請求封裝接口
    /// </summary>
    public interface IHttpClient
    {
        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="client"></param>
        /// <param name="action"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        public  Task<T> GetData<T>(HttpClient client, string action, dynamic param);
        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="client"></param>
        /// <param name="action"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        public Task<T> PostData<T>(HttpClient client, string action, dynamic param);
        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="client"></param>
        /// <param name="action"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        public Task<T> PutData<T>(HttpClient client, string action, dynamic param);
    }

第二步:創建實現類:OtherHttpClient
代碼如下:

 /// <summary>
    /// 應用服務類
    /// </summary>
    public class OtherHttpClient : IOtherHttpClient, ITransientDependency
    {
        /// <summary>
        /// Get請求獲取
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="client"></param>
        /// <param name="action"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        public async Task<T> GetData<T>(HttpClient client, string action, dynamic param)
        {
            try
            {
                HttpResponseMessage response;
                using (HttpContent httpContent = new StringContent(JsonConvert.SerializeObject(param), Encoding.UTF8))
                {

                    httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");

                    client.DefaultRequestHeaders.Add("x-token", "M3Q_mQEwmn9l4Ly7fM7DxaMSdlYSSup5lfKLztF");
                    response = await client.GetAsync(action).ContinueWith(res =>
                    {

                        return res;

                    }).Result;
                }
                if (response != null && response.IsSuccessStatusCode)
                {
                    return await response.Content.ReadAsAsync<T>();

                }
                else
                {
                    return default(T);
                }
            }
            catch (Exception ex)
            {

                throw;
            }
            finally
            {
            }
        }
        /// <summary>
        /// Post請求獲
        /// </summary>
        /// <typeparam name="T">返回值類型</typeparam>
        /// <param name="client"></param>
        /// <param name="action"></param>
        /// <param name="param">參數</param>
        /// <returns></returns>
        public async Task<T> PostData<T>(HttpClient client, string action, dynamic param)
        {
            try
            {
                HttpResponseMessage response;
                using (HttpContent httpContent = new StringContent(JsonConvert.SerializeObject(param), Encoding.UTF8))
                {

                    httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");

                    client.DefaultRequestHeaders.Add("x-token", "M3Q_mQEwmn9l4Ly7fM7DxaMSdlYSSup5lfKLztF_VP97Urf");
                    response = await client.PostAsync(action, httpContent).ContinueWith(res =>
                    {

                        return res;

                    }).Result;
                }
                if (response != null && response.IsSuccessStatusCode)
                {
                    return await response.Content.ReadAsAsync<T>();

                }
                else
                {
                    return default(T);
                }
            }
            catch (Exception ex)
            {

                throw;
            }
            finally
            {
            }
        }
        /// <summary>
        /// Put請求
        /// </summary>
        /// <typeparam name="T">返回值類型</typeparam>
        /// <param name="client"></param>
        /// <param name="action"></param>
        /// <param name="param">參數</param>
        /// <returns></returns>
        public async Task<T> PutData<T>(HttpClient client, string action, dynamic param)
        {
            try
            {
                HttpResponseMessage response;
                using (HttpContent httpContent = new StringContent(JsonConvert.SerializeObject(param), Encoding.UTF8))
                {

                    httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");

                    client.DefaultRequestHeaders.Add("x-token", "M3Q_mQEwmn9l4Ly7fM7DxaMSdlYSSup5lfKLztF_VP97Urf");
                    response = await client.PutAsync(action, httpContent).ContinueWith(res =>
                    {

                        return res;

                    }).Result;
                }
                if (response != null && response.IsSuccessStatusCode)
                {
                    return await response.Content.ReadAsAsync<T>();

                }
                else
                {
                    return default(T);
                }
            }
            catch (Exception ex)
            {

                throw;
            }
            finally
            {
            }
        }

文件結構:
在這裏插入圖片描述

4、接口中調用方式如下:
先引入:

  private IOtherHttpClient _OtherHttpClient;
        private readonly IHttpClientFactory _clientFactory;
        HttpClient _applicationClient;
        public SupApplyAppService(IRepository<upervision, string> repository, 
            IHttpClientFactory clientFactory,
            IOtherHttpClient OtherAHttpClient         
            ) : base(repository)
        {
            _repository = repository;
            _clientFactory = clientFactory;
            _applicationClient = _clientFactory.CreateClient("OtherApplicationServer");
            _OtherHttpClient = OtherHttpClient;           
        }

調用封裝好的方法:

  public async Task<bool> CreateInfo(SupervisionWFDto input)
        {
            Task<bool> isSuccess = Task.FromResult<bool>(false);
            try
            {
                //調用第三方接口
                await _OtherHttpClient.PostData<ResultDto<List<WorkOutDto>>>(_applicationClient, $"/jaxrs/work/process/{input.ProcessInput.ProcessGuid}", input.InParam)
           .ContinueWith(res =>
           {
               if (res.Result.type == "success")
               {
                          isSuccess = Task.Factory.StartNew(() =>
                                          {
                                              //新增數據                        
                                              base.Create(input.Input);
                                              return true;
                                          });   
                   }
               }
               return res;
           });
            }
            catch (Exception e)
            {
                throw new UserFriendlyException(e.Message);
            }
            return isSuccess.Result ? true : false;
        }       
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章