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<string> GetAsync(string url, Dictionary<string, string> 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<string> PostAsync(string url, string content, string contentType = "application/json", Dictionary<string, string> 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<string> PutAsync(string url, string content, string contentType = "application/json", Dictionary<string, string> 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<string> DeleteAsync(string url, Dictionary<string, string> 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<string, string> 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<string, string> 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<string, string> 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<string, string> 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<string, string> headers) {
|
if (headers != null) {
|
foreach (var header in headers) {
|
request.Headers.TryAddWithoutValidation(header.Key, header.Value);
|
}
|
}
|
}
|
|
public void Dispose() {
|
_httpClient?.Dispose();
|
}
|
}
|
}
|