• .NetCore中HttpClient简单封装


    HttpClient是经常用到的。我们做一个简单的封装类

    using Newtonsoft.Json;
    using System;
    using System.Collections.Generic;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using System.Text;
    using System.Threading.Tasks;
    public class HttpClientHelper
        {
            /// <summary>
            /// application/x-www-form-urlencoded
            /// </summary>
            /// <typeparam name="TBody"></typeparam>
            /// <param name="_client"></param>
            /// <param name="uri"></param>
            /// <param name="requestData"></param>
            /// <returns></returns>
            public static async Task<TBody> PostFormAsync<TBody>(HttpClient _client, string uri, Dictionary<string, string> param)
            {
    
                try
                {
                    using (var multipartFormDataContent = new FormUrlEncodedContent(param))
                    {
                        Console.WriteLine(JsonConvert.SerializeObject(param));
                        var result = await _client.PostAsync(uri, multipartFormDataContent).Result.Content.ReadAsStringAsync();
                        var resp = JsonConvert.DeserializeObject<TBody>(result);
                        return resp;
                    }
                }
                catch (Exception ex)
                {
    
                    throw ex;
    
                }
    
            }
    
    
    
            /// <summary>
            /// application/json
            /// </summary>
            /// <typeparam name="TBody"></typeparam>
            /// <param name="_client"></param>
            /// <param name="uri"></param>
            /// <param name="requestData"></param>
            /// <returns></returns>
            public static async Task<TBody> PostAsync<TBody>(HttpClient _client, string uri, dynamic requestData)
                => await SendAsync<TBody>(_client, "application/json", HttpMethod.Post, uri, requestData);
    
            public static async Task<TBody> GetAsync<TBody>(HttpClient _client, string uri, Dictionary<string, string> headerDict = null)
                => await SendAsync<TBody>(_client, "application/json", HttpMethod.Get, uri, null, headerDict);
    
            public static async Task<TBody> SendAsync<TBody>(HttpClient _client, string ContentType, HttpMethod method, string uri, dynamic requestData, Dictionary<string, string> headerDict=null)
            {
                string content = "";
                if (!string.IsNullOrEmpty(requestData))
                { 
                    content = JsonConvert.SerializeObject(requestData, new JsonSerializerSettings
                    {
                        NullValueHandling = NullValueHandling.Ignore
                    });
                }
                try
                {
                    using (HttpRequestMessage message = new HttpRequestMessage(method, uri))
                    {
                        if(headerDict != null)
                        {
                            foreach(var d in headerDict)
                            {
                                message.Headers.Add(d.Key, d.Value);
                            } 
                        }
                        using (HttpContent httpContent = new StringContent(content, Encoding.UTF8))
                        {
                            httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse(ContentType);
                            message.Content = httpContent;
    
                            var httpResponseMessage = await _client.SendAsync(message);
    
                            string json = await httpResponseMessage.Content.ReadAsStringAsync();
                            var resp = JsonConvert.DeserializeObject<TBody>(json);
    
                            return resp;
    
                        }
                    }
                }
                catch (Exception ex)
                {
    
                    throw;
    
                }
            } 
        }

    调用方法如下:

     var client = _clientFactory.CreateClient();
    
                string TenantAPI = "http://xxxx"; 
    
                var httpRet = await HttpClientHelper.GetAsync<Result<TenantInfoResp>>(client, TenantAPI);
  • 相关阅读:
    腾讯开源 APIJSON 连创五个第一
    最火的分布式 HTAP 数据库 TiDB
    完爆Facebook/GraphQL,APIJSON全方位对比解析(三)-表关联查询
    后端自动化版本管理,再也不用改URL了!
    后端开挂:3行代码写出8个接口!
    3步创建服务端新表及配置
    Activity猫的一生-故事解说Activity生命周期
    APIJSON-以坚持和偏执,回敬傲慢和偏见
    APIJSON,让接口和文档见鬼去吧!
    Android 100多个Styles快速开发布局XML,一行搞定View属性,一键统一配置UI...
  • 原文地址:https://www.cnblogs.com/puzi0315/p/15592298.html
Copyright © 2020-2023  润新知