using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; namespace HH.WCS.Mobox3.DSZSH.util { // 尝试优化HttpHelper public class WebHelper : IDisposable { private readonly HttpClient _httpClient; private readonly int _timeoutSeconds; public WebHelper(int timeoutSeconds = 3) { _httpClient = new HttpClient(); _timeoutSeconds = timeoutSeconds; _httpClient.Timeout = TimeSpan.FromSeconds(_timeoutSeconds); } #region 异步方法 public async Task GetAsync(string url, Dictionary headers = null) { try { using (var request = new HttpRequestMessage(HttpMethod.Get, url)) { AddHeaders(request, headers); var response = await _httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); return await response.Content.ReadAsStringAsync(); } } catch (Exception e) { LogHelper.Info($"GET request failed: {e.Message}", "API"); return string.Empty; } } public async Task PostAsync(string url, string content, string contentType = "application/json", Dictionary headers = null) { try { using (var request = new HttpRequestMessage(HttpMethod.Post, url)) { AddHeaders(request, headers); request.Content = new StringContent(content, Encoding.UTF8, contentType); var response = await _httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); return await response.Content.ReadAsStringAsync(); } } catch (Exception e) { LogHelper.Info($"POST request failed: {e.Message}", "API"); return string.Empty; } } public async Task PutAsync(string url, string content, string contentType = "application/json", Dictionary headers = null) { try { using (var request = new HttpRequestMessage(HttpMethod.Put, url)) { AddHeaders(request, headers); request.Content = new StringContent(content, Encoding.UTF8, contentType); var response = await _httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); return await response.Content.ReadAsStringAsync(); } } catch (Exception e) { LogHelper.Info($"PUT request failed: {e.Message}", "API"); return string.Empty; } } public async Task DeleteAsync(string url, Dictionary headers = null) { try { using (var request = new HttpRequestMessage(HttpMethod.Delete, url)) { AddHeaders(request, headers); var response = await _httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); return await response.Content.ReadAsStringAsync(); } } catch (Exception e) { LogHelper.Info($"DELETE request failed: {e.Message}", "API"); return string.Empty; } } #endregion #region 同步方法 public string WebGet(string url, Dictionary headers = null) { try { using (var request = new HttpRequestMessage(HttpMethod.Get, url)) { AddHeaders(request, headers); var response = _httpClient.SendAsync(request).GetAwaiter().GetResult(); response.EnsureSuccessStatusCode(); return response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); } } catch (Exception e) { LogHelper.Info($"GET request failed: {e.Message}", "API"); return string.Empty; } } public string WebPost(string url, string postData, string contentType = "application/json", Dictionary headers = null) { try { using (var request = new HttpRequestMessage(HttpMethod.Post, url)) { AddHeaders(request, headers); request.Content = new StringContent(postData, Encoding.UTF8, contentType); var response = _httpClient.SendAsync(request).GetAwaiter().GetResult(); response.EnsureSuccessStatusCode(); return response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); } } catch (Exception e) { LogHelper.Info($"POST request failed: {e.Message}", "API"); return string.Empty; } } public string WebPut(string url, string putData, string contentType = "application/json", Dictionary headers = null) { try { using (var request = new HttpRequestMessage(HttpMethod.Put, url)) { AddHeaders(request, headers); request.Content = new StringContent(putData, Encoding.UTF8, contentType); var response = _httpClient.SendAsync(request).GetAwaiter().GetResult(); response.EnsureSuccessStatusCode(); return response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); } } catch (Exception e) { LogHelper.Info($"PUT request failed: {e.Message}", "API"); return string.Empty; } } public string WebDelete(string url, Dictionary headers = null) { try { using (var request = new HttpRequestMessage(HttpMethod.Delete, url)) { AddHeaders(request, headers); var response = _httpClient.SendAsync(request).GetAwaiter().GetResult(); response.EnsureSuccessStatusCode(); return response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); } } catch (Exception e) { LogHelper.Info($"DELETE request failed: {e.Message}", "API"); return string.Empty; } } #endregion private void AddHeaders(HttpRequestMessage request, Dictionary headers) { if (headers != null) { foreach (var header in headers) { request.Headers.TryAddWithoutValidation(header.Key, header.Value); } } } public void Dispose() { _httpClient?.Dispose(); } } }