using Microsoft.Extensions.Options; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using UnmannedVehicle.Configs; using UnmannedVehicle.DTO.Fetch; using UnmannedVehicle.Interfaces;
///<summary> /// 复制 HttpRequestMessage(必须) ///</summary> privatestaticasync Task<HttpRequestMessage> CloneRequestAsync(HttpRequestMessage request) { var clone = new HttpRequestMessage(request.Method, request.RequestUri);
// 复制 headers foreach (var header in request.Headers) clone.Headers.TryAddWithoutValidation(header.Key, header.Value);
// 复制 content if (request.Content != null) { var ms = new MemoryStream(); await request.Content.CopyToAsync(ms); ms.Position = 0; clone.Content = new StreamContent(ms);
foreach (var header in request.Content.Headers) clone.Content.Headers.TryAddWithoutValidation(header.Key, header.Value); }
return clone; } ///<summary> /// 获取token ///</summary> ///<returns></returns> ///<exception cref="Exception"></exception> publicasync Task<JiuShiApiRes<FetchTokenRes>> FetchTokenAsync() { var url = "https://auth.zelostech.com.cn/app/accessToken"; var httpClient = _httpClientFactory.CreateClient(); var body = new FetchTokenReq(_jiuShiSetting.Value.AppId, _jiuShiSetting.Value.AppKey); HttpResponseMessage response = await httpClient.PostAsJsonAsync(url, body); if (!response.IsSuccessStatusCode) { thrownew Exception($"获取九识 token 失败,HTTP {(int)response.StatusCode}"); } var data = await response.Content.ReadFromJsonAsync<JiuShiApiRes<FetchTokenRes>>(); if (data == null || !data.success) { thrownew Exception("九识返回 token 失败:" + data?.message); } return data; } } }