暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

c#中HttpClient的使用帮助类(记录帖)

Hadoop大数据开发 2021-07-05
2222

之前写好的,有兴趣的可以看一看。

public class HttpHelplerProvider
    {


        public readonly HttpClient client;
        public HttpHelplerProvider()
        
{
            client = new HttpClient();
        }

        #region Get请求
        /// <summary>
        /// 发送Get请求
        /// </summary>
        /// <param name="url">网站地址</param>
        /// <returns>返回获取的Html页面</returns>
        public virtual async Task<HttpResponseMessage> GetAsync(string url)
        {
            HttpRequestMessage httpRequestMessage = new HttpRequestMessage(
                  HttpMethod.Get,
                  url);
            return await client.SendAsync(httpRequestMessage);
        }

        /// <summary>
        /// 发送Get请求
        /// </summary>
        /// <param name="url">网站地址</param>
        /// <param name="querystrings">Get参数</param>
        /// <returns>返回获取的Html页面</returns>
        public virtual async Task<HttpResponseMessage> GetByQueryStringAsync(string url, Dictionary<stringstring> querystrings)
        {
            string uri = await GetUrlParamsAsync(url, querystrings);
            return await client.GetAsync(uri);
        }

        /// <summary>
        /// 发送Get请求
        /// </summary>
        /// <param name="url">网站地址</param>
        /// <param name="headers">请求头</param>
        /// <returns></returns>
        public virtual async Task<HttpResponseMessage> GetHeaderAsync(string url, Dictionary<stringstring> headers)
        {
            HttpRequestMessage httpRequestMessage = new HttpRequestMessage(
                  HttpMethod.Get,
                  url);
            foreach (var item in headers)
            {
                client.DefaultRequestHeaders.Add(item.Key, item.Value);
            }
            return await client.SendAsync(httpRequestMessage);
        }

        /// <summary>
        /// 发送Get请求
        /// </summary>
        /// <param name="url">网站地址</param>
        /// <param name="querystrings">请求参数</param>
        /// <param name="headers">请求头</param>
        /// <returns></returns>
        public virtual async Task<HttpResponseMessage> GetHeaderAsync(string url, Dictionary<stringstring> querystrings, Dictionary<stringstring> headers)
        {
            string uri = await GetUrlParamsAsync(url, querystrings);
            HttpRequestMessage httpRequestMessage = new HttpRequestMessage(
                  HttpMethod.Get,
                  uri);
            foreach (var item in headers)
            {
                client.DefaultRequestHeaders.Add(item.Key, item.Value);
            }
            return await client.SendAsync(httpRequestMessage);
        }

        /// <summary>
        /// 把Get请求的url和参数拼接起来
        /// </summary>
        /// <param name="url">请求地址</param>
        /// <param name="querystrings">请求参数</param>
        /// <returns>拼接的Url</returns>
        private async Task<string> GetUrlParamsAsync(string url, Dictionary<stringstring> querystrings)
        {
            string uri = url;
            string urlparams = "";
            foreach (var item in querystrings)
            {
                urlparams += $"{item.Key}={item.Value}&";
            }
            if (uri.Contains("?"))
            {
                uri = $"{url}&{urlparams}";
            }
            else
            {
                uri = $"{url}?{urlparams}";
            }
            uri = uri.TrimEnd('&');
            return await Task.FromResult(uri);
        }
        #endregion

        #region Post请求
        /// <summary>
        /// Post表单提交
        /// </summary>
        /// <param name="url">请求地址</param>
        /// <param name="data">表单参数</param>
        /// <returns></returns>
        public virtual async Task<HttpResponseMessage> PostAsync(string url, Dictionary<stringstring> data)
        {
            HttpRequestMessage httpResponseMessage = new HttpRequestMessage(
                    HttpMethod.Post,
                    url
                );
            httpResponseMessage.Content = new FormUrlEncodedContent(data);

            return await client.SendAsync(httpResponseMessage);
        }

        /// <summary>
        /// Post表单提交
        /// </summary>
        /// <param name="url">请求地址</param>
        /// <param name="querystrings">url参数</param>
        /// <param name="data">表单参数</param>
        /// <returns></returns>
        public virtual async Task<HttpResponseMessage> PostAsync(string url, Dictionary<stringstring> querystrings, Dictionary<stringstring> data)
        {
            string uri = await GetUrlParamsAsync(url, querystrings);
            HttpRequestMessage httpResponseMessage = new HttpRequestMessage(
                    HttpMethod.Post,
                    uri
                );
            httpResponseMessage.Content = new FormUrlEncodedContent(data);

            return await client.SendAsync(httpResponseMessage);
        }


        /// <summary>
        /// Post请求application/json方式提交
        /// </summary>
        /// <param name="url">请求地址</param>
        /// <param name="data">请求参数</param>
        /// <returns></returns>
        public virtual async Task<HttpResponseMessage> PostJsonAsync(string url, Dictionary<stringstring> data)
        {
            HttpRequestMessage httpResponseMessage = new HttpRequestMessage(
                    HttpMethod.Post,
                    url
                );
            string jsondata = JsonConvert.SerializeObject(data);
            StringContent stringContent = new StringContent(jsondata);
            stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            httpResponseMessage.Content = stringContent;
            return await client.SendAsync(httpResponseMessage);
        }

        /// <summary>
        /// Post请求application/json方式提交
        /// </summary>
        /// <param name="url">请求地址</param>
        /// <param name="querystrings">url参数</param>
        /// <param name="data">请求参数</param>
        /// <returns></returns>
        public virtual async Task<HttpResponseMessage> PostJsonAsync(string url, Dictionary<stringstring> querystrings, Dictionary<stringstring> data)
        {
            string uri = await GetUrlParamsAsync(url, querystrings);
            HttpRequestMessage httpResponseMessage = new HttpRequestMessage(
                    HttpMethod.Post,
                    uri
                );
            string jsondata = JsonConvert.SerializeObject(data);
            StringContent stringContent = new StringContent(jsondata);
            stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            httpResponseMessage.Content = stringContent;
            return await client.SendAsync(httpResponseMessage);
        }

        /// <summary>
        /// Post请求提交文件
        /// </summary>
        /// <param name="url">请求地址</param>
        /// <param name="data">请求的参数</param>
        /// <param name="fileEntities">请求的文件参数,可多文件上传 key 上传字段名称 value 文件的路径</param>
        /// <returns></returns>
        public virtual async Task<HttpResponseMessage> PostFileAsync(string url, Dictionary<stringstring> data, Dictionary<stringstring> fileEntities)
        {
            HttpRequestMessage httpResponseMessage = new HttpRequestMessage(
                    HttpMethod.Post,
                    url
                );
            MultipartFormDataContent multipartFormDataContent = new MultipartFormDataContent();
            foreach (var item in data)
            {
                multipartFormDataContent.Add(new StringContent(item.Value), item.Key);
            }
            foreach (var file in fileEntities)
            {
                multipartFormDataContent.Add(new ByteArrayContent(File.ReadAllBytes(file.Value)), file.Key, Path.GetFileName(file.Value));
            }
            httpResponseMessage.Content = multipartFormDataContent;
            return await client.SendAsync(httpResponseMessage);
        }


        /// <summary>
        /// Post请求提交文件
        /// </summary>
        /// <param name="url">请求地址</param>
        /// <param name="querystrings">url参数</param>
        /// <param name="data">请求的参数</param>
        /// <param name="fileEntities">请求的文件参数,可多文件上传 key 上传字段名称 value 文件的路径</param>
        /// <returns></returns>
        public virtual async Task<HttpResponseMessage> PostFileAsync(string url, Dictionary<stringstring> querystrings, Dictionary<stringstring> data, Dictionary<stringstring> fileEntities)
        {
            string uri = await GetUrlParamsAsync(url, querystrings);
            HttpRequestMessage httpResponseMessage = new HttpRequestMessage(
                    HttpMethod.Post,
                    uri
                );
            MultipartFormDataContent multipartFormDataContent = new MultipartFormDataContent();
            foreach (var item in data)
            {
                multipartFormDataContent.Add(new StringContent(item.Value), item.Key);
            }
            foreach (var file in fileEntities)
            {
                multipartFormDataContent.Add(new ByteArrayContent(File.ReadAllBytes(file.Value)), file.Key, Path.GetFileName(file.Value));
            }
            httpResponseMessage.Content = multipartFormDataContent;
            return await client.SendAsync(httpResponseMessage);
        }
        #endregion

    }


文章转载自Hadoop大数据开发,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论