对接阿里云的ai,流输出,隐藏前端token
问ai写的,然后是一次性返现,然后问ai调整,就是一点点返回
/// <summary> /// 流式对话接口 - 真正的逐块转发 /// </summary> [HttpPost()] public async Task ChatCompletions() { try { // 读取原始请求体 string requestBody; using (var reader = new StreamReader(Request.Body)) { requestBody = await reader.ReadToEndAsync(); } _httpClient.DefaultRequestHeaders.Clear(); _httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {ALiCloudApiKey}"); // 使用 SendAsync 而不是 PostAsync var request = new HttpRequestMessage(HttpMethod.Post, AliCloudUrl) { Content = new StringContent(requestBody, Encoding.UTF8, "application/json") }; // 关键:使用 HttpCompletionOption.ResponseHeadersRead using var response = await _httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); // 复制响应状态码 Response.StatusCode = (int)response.StatusCode; // 设置流式响应头 Response.Headers.ContentType = "text/event-stream"; Response.Headers.CacheControl = "no-cache"; Response.Headers.Connection = "keep-alive"; // 获取响应流并直接复制(真正的流式传输) using var responseStream = await response.Content.ReadAsStreamAsync(); await responseStream.CopyToAsync(Response.Body); } catch (Exception ex) { if (!Response.HasStarted) { Response.StatusCode = 500; await Response.WriteAsync($"Error: {ex.Message}"); } } }
关键在于是这个
// 关键:使用 HttpCompletionOption.ResponseHeadersRead using var response = await _httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
前面一致是,然后在.,HttpCompletionOption.ResponseHeadersRead,是错误的


浙公网安备 33010602011771号