using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; using System.Security.Policy; using System.Text; using System.Threading; using System.Threading.Tasks; /// /// http调用帮助类 /// public class HttpHelper { /// /// /// /// /// /// /// /// /// public static async Task> PostRequestAsync(string url, object dto, int timeoutSeconds = 30, CancellationToken token = default) { var content = new StringContent(JsonConvert.SerializeObject(dto), System.Text.Encoding.UTF8, "application/json"); var handler = new HttpClientHandler() { UseCookies = false }; HttpClient client = new HttpClient(handler); client.Timeout = TimeSpan.FromSeconds(timeoutSeconds); var message = new HttpRequestMessage(HttpMethod.Post, url); message.Content = content; var response = await client.SendAsync(message, token); response.EnsureSuccessStatusCode(); var result = await response.Content.ReadAsStringAsync(); var AjaxResult = JsonConvert.DeserializeObject>(result); return AjaxResult; } /// /// /// /// /// /// /// /// public static async Task PostRequestAsync(string url, object dto, int timeoutSeconds = 30, CancellationToken token = default) { var content = new StringContent(JsonConvert.SerializeObject(dto), System.Text.Encoding.UTF8, "application/json"); var handler = new HttpClientHandler() { UseCookies = false }; HttpClient client = new HttpClient(handler); client.Timeout = TimeSpan.FromSeconds(timeoutSeconds); var message = new HttpRequestMessage(HttpMethod.Post, url); message.Content = content; var response = await client.SendAsync(message, token); response.EnsureSuccessStatusCode(); var result = await response.Content.ReadAsStringAsync(); var AjaxResult = JsonConvert.DeserializeObject(result); return AjaxResult; } public static async Task> GetRequestAsync(string url, int timeoutSeconds = 30) { var handler = new HttpClientHandler() { UseCookies = false }; HttpClient client = new HttpClient(handler); client.Timeout = TimeSpan.FromSeconds(timeoutSeconds); var response = await client.GetAsync(url); response.EnsureSuccessStatusCode(); var result = await response.Content.ReadAsStringAsync(); var AjaxResult = JsonConvert.DeserializeObject>(result); return AjaxResult; } /// /// /// /// /// /// /// /// public static async Task DownloadFileAsync(string baseUrl, string remoteFileName, string localFile, int timeoutSeconds = 30) { if (!baseUrl.EndsWith("/")) baseUrl += "/"; var server = new Uri(baseUrl + $"wwwroot/{remoteFileName}"); var httpClient = new HttpClient(); httpClient.Timeout = TimeSpan.FromSeconds(timeoutSeconds); var responseMessage = await httpClient.GetAsync(server); if (responseMessage.IsSuccessStatusCode) { using (var fs = File.Create(localFile)) { // 获取结果,并转成 stream 保存到本地。 var streamFromService = await responseMessage.Content.ReadAsStreamAsync(); streamFromService.CopyTo(fs); } return true; } else return false; } /// /// 上传文件,wav文件会自动去掉44字节头 /// /// /// /// /// /// public static async Task UploadFileAsync(string localFile, string uploadUrl, int timeoutSeconds = 30, CancellationToken token = default) { try { // 添加文件内容到 MultipartFormDataContent FileInfo info = new FileInfo(localFile); bool isWav = info.Extension.ToLower() == ".wav"; byte[] fileBytes = File.ReadAllBytes(localFile); if (isWav) { fileBytes = fileBytes.Skip(44).ToArray();//wav文件有44字节头 } MultipartFormDataContent content = new MultipartFormDataContent(); ByteArrayContent fileContent = new ByteArrayContent(fileBytes); content.Add(fileContent, "file", Path.GetFileName(localFile)); var handler = new HttpClientHandler() { UseCookies = false }; HttpClient client = new HttpClient(handler); client.Timeout = TimeSpan.FromSeconds(timeoutSeconds); var message = new HttpRequestMessage(HttpMethod.Post, uploadUrl); message.Content = content; var response = await client.SendAsync(message, token); response.EnsureSuccessStatusCode(); var result = await response.Content.ReadAsStringAsync(); var AjaxResult = JsonConvert.DeserializeObject>(result); if (AjaxResult.code == 200) { return AjaxResult.data; } else { throw new Exception(AjaxResult.msg); } } catch (TaskCanceledException) { throw new Exception($"上传文件{Path.GetFileName(localFile)}到{uploadUrl}超时!"); } catch { throw new Exception($"上传文件{Path.GetFileName(localFile)}到{uploadUrl}失败!"); } } } /// /// Http接口返回泛型对象 /// public class AjaxResult { /// /// 返回对象 /// public T data { get; set; } /// /// 返回消息 /// public string msg { get; set; } = "ok"; /// /// 状态码.成功=200,失败=0 /// public int code { get; set; } = 200; } /// /// Http接口返回对象 /// public class AjaxResult { /// /// 返回对象 /// public object data { get; set; } /// /// 返回消息 /// public string msg { get; set; } = "ok"; /// /// 状态码.成功=200,失败=0 /// public int code { get; set; } = 200; }