| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- using Newtonsoft.Json;
- using System;
- using System.Collections.Concurrent;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net.Http;
- using System.Net.Http.Headers;
- using System.Threading.Tasks;
- namespace Host
- {
- /// <summary>
- /// 请求帮助类
- /// </summary>
- public class HttpHelper
- {
- public static readonly HttpHelper Instance;
- static HttpHelper()
- {
- Instance = new HttpHelper();
- }
- /// <summary>
- /// 不同url分配不同HttpClient
- /// </summary>
- public static ConcurrentDictionary<string, HttpClient> dictionary = new ConcurrentDictionary<string, HttpClient>();
- private HttpClient GetHttpClient(string url)
- {
- var uri = new Uri(url);
- var key = uri.Scheme + uri.Host;
- //if (!dictionary.Keys.Contains(key))
- return dictionary.GetOrAdd(key, new HttpClient());
- //return dictionary[key];
- }
- /// <summary>
- /// Post请求
- /// </summary>
- /// <param name="url">url地址</param>
- /// <param name="jsonString">请求参数(Json字符串)</param>
- /// <param name="headers">webapi做用户认证</param>
- /// <returns></returns>
- public async Task<HttpResponseMessage> PostAsync(string url, string jsonString, Dictionary<string, string> headers = null)
- {
- if (string.IsNullOrWhiteSpace(jsonString))
- jsonString = "{}";
- StringContent content = new StringContent(jsonString);
- content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
- if (headers != null && headers.Any())
- {
- //如果有headers认证等信息,则每个请求实例一个HttpClient
- using (HttpClient http = new HttpClient())
- {
- foreach (var item in headers)
- {
- http.DefaultRequestHeaders.Remove(item.Key);
- http.DefaultRequestHeaders.TryAddWithoutValidation(item.Key, item.Value);
- }
- return await http.PostAsync(new Uri(url), content);
- }
- }
- else
- {
- return await GetHttpClient(url).PostAsync(new Uri(url), content);
- }
- }
- /// <summary>
- /// Post请求
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="url">url地址</param>
- /// <param name="content">请求参数</param>
- /// <param name="headers">webapi做用户认证</param>
- /// <returns></returns>
- public async Task<HttpResponseMessage> PostAsync<T>(string url, T content, Dictionary<string, string> headers = null) where T : class
- {
- return await PostAsync(url, JsonConvert.SerializeObject(content), headers);
- }
- /// <summary>
- /// Get请求
- /// </summary>
- /// <param name="url">url地址</param>
- /// <param name="headers">webapi做用户认证</param>
- /// <returns></returns>
- public async Task<HttpResponseMessage> GetAsync(string url, Dictionary<string, string> headers = null)
- {
- if (headers != null && headers.Any())
- {
- //如果有headers认证等信息,则每个请求实例一个HttpClient
- using (HttpClient http = new HttpClient())
- {
- foreach (var item in headers)
- {
- http.DefaultRequestHeaders.Remove(item.Key);
- http.DefaultRequestHeaders.TryAddWithoutValidation(item.Key, item.Value);
- }
- return await http.GetAsync(url);
- }
- }
- else
- {
- return await GetHttpClient(url).GetAsync(url);
- }
- }
- /// <summary>
- /// Put请求
- /// </summary>
- /// <param name="url">url地址</param>
- /// <param name="jsonString">请求参数(Json字符串)</param>
- /// <param name="headers">webapi做用户认证</param>
- /// <returns></returns>
- public async Task<HttpResponseMessage> PutAsync(string url, string jsonString, Dictionary<string, string> headers = null)
- {
- if (string.IsNullOrWhiteSpace(jsonString))
- jsonString = "{}";
- StringContent content = new StringContent(jsonString);
- content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
- if (headers != null && headers.Any())
- {
- //如果有headers认证等信息,则每个请求实例一个HttpClient
- using (HttpClient http = new HttpClient())
- {
- foreach (var item in headers)
- {
- http.DefaultRequestHeaders.Remove(item.Key);
- http.DefaultRequestHeaders.TryAddWithoutValidation(item.Key, item.Value);
- }
- return await http.PutAsync(url, content);
- }
- }
- else
- {
- return await GetHttpClient(url).PutAsync(url, content);
- }
- }
- /// <summary>
- /// Put请求
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="url">url地址</param>
- /// <param name="content">请求参数</param>
- /// <param name="headers">webapi做用户认证</param>
- /// <returns></returns>
- public async Task<HttpResponseMessage> PutAsync<T>(string url, T content, Dictionary<string, string> headers = null)
- {
- return await PutAsync(url, JsonConvert.SerializeObject(content), headers);
- }
- /// <summary>
- /// Delete请求
- /// </summary>
- /// <param name="url"></param>
- /// <param name="headers">webapi做用户认证</param>
- /// <returns></returns>
- public async Task<HttpResponseMessage> DeleteAsync(string url, Dictionary<string, string> headers = null)
- {
- if (headers != null && headers.Any())
- {
- //如果有headers认证等信息,则每个请求实例一个HttpClient
- using (HttpClient http = new HttpClient())
- {
- foreach (var item in headers)
- {
- http.DefaultRequestHeaders.Remove(item.Key);
- http.DefaultRequestHeaders.TryAddWithoutValidation(item.Key, item.Value);
- }
- return await http.DeleteAsync(url);
- }
- }
- else
- {
- return await GetHttpClient(url).DeleteAsync(url);
- }
- }
- }
- }
|