Explorar el Código

强制启动TLS1.2协议

yuanrf hace 2 días
padre
commit
887d2df278
Se han modificado 1 ficheros con 17 adiciones y 12 borrados
  1. 17 12
      OASystem/OASystem.Api/OAMethodLib/DoubaoAPI/DoubaoService.cs

+ 17 - 12
OASystem/OASystem.Api/OAMethodLib/DoubaoAPI/DoubaoService.cs

@@ -1,5 +1,6 @@
 using Aspose.Words;
 using OASystem.API.OAMethodLib.File;
+using System.Net;
 using System.Net.Http.Headers;
 using System.Text;
 
@@ -11,6 +12,17 @@ namespace OASystem.API.OAMethodLib.DoubaoAPI
         private readonly DoubaoSetting _doubaoSetting;
         private readonly ILogger<DoubaoService> _logger;
 
+        private HttpClient CreateDoubaoClient()
+        {
+            // 强制指定 TLS 1.2(进程级设置)
+            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
+
+            var httpClient = _httpClientFactory.CreateClient("Doubao");
+            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _doubaoSetting.ApiKey);
+            httpClient.Timeout = TimeSpan.FromMinutes(10);
+            return httpClient;
+        }
+
         public DoubaoService(IHttpClientFactory httpClientFactory, DoubaoSetting doubaoSetting, ILogger<DoubaoService> logger)
         {
             _httpClientFactory = httpClientFactory;
@@ -38,9 +50,7 @@ namespace OASystem.API.OAMethodLib.DoubaoAPI
             }
 
             options ??= new CompleteChatOptions();
-            var httpClient = _httpClientFactory.CreateClient("Doubao");
-            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _doubaoSetting.ApiKey);
-            httpClient.Timeout = TimeSpan.FromMinutes(10);
+            var httpClient = CreateDoubaoClient();
 
             var body = new Dictionary<string, object>
             {
@@ -90,9 +100,7 @@ namespace OASystem.API.OAMethodLib.DoubaoAPI
             }
 
             options ??= new CompleteMultimodalChatOptions();
-            var httpClient = _httpClientFactory.CreateClient("Doubao");
-            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _doubaoSetting.ApiKey);
-            httpClient.Timeout = TimeSpan.FromMinutes(10); // 超时控制
+            var httpClient = CreateDoubaoClient();
 
             // 2. 构建请求体(核心:修正type值)
             var requestBody = new
@@ -208,8 +216,7 @@ namespace OASystem.API.OAMethodLib.DoubaoAPI
 
         public async Task<DoubaoFileResponse> UploadFileAsync(Stream fileStream, string fileName, string purpose = "user_data")
         {
-            var httpClient = _httpClientFactory.CreateClient("Doubao");
-            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _doubaoSetting.ApiKey);
+            var httpClient = CreateDoubaoClient();
 
             using var content = new MultipartFormDataContent();
 
@@ -236,8 +243,7 @@ namespace OASystem.API.OAMethodLib.DoubaoAPI
 
         public async Task<DoubaoFileListResponse> ListFilesAsync()
         {
-            var httpClient = _httpClientFactory.CreateClient("Doubao");
-            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _doubaoSetting.ApiKey);
+            var httpClient = CreateDoubaoClient();
 
             var response = await httpClient.GetAsync("files");
             response.EnsureSuccessStatusCode();
@@ -248,8 +254,7 @@ namespace OASystem.API.OAMethodLib.DoubaoAPI
 
         public async Task<bool> DeleteFileAsync(string fileId)
         {
-            var httpClient = _httpClientFactory.CreateClient("Doubao");
-            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _doubaoSetting.ApiKey);
+            var httpClient = CreateDoubaoClient();
 
             var response = await httpClient.DeleteAsync($"files/{fileId}");
             return response.IsSuccessStatusCode;