默认情况下HttpClient中有缓存,在读取流数据的时候,往往要等一小会儿,然后读出一大堆。
我们在请求OpenAI类的大模型的时候,往往要一边读取一边显示(输出),这时候需要禁止HttpClient 中内置的缓存功能。
其实就是在一步请求的时候加了一个“HttpCompletionOption.ResponseHeadersRead”参数而已。
示例代码如下
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;public async Task SendPostRequestAsync(string url, string jsonData)
{using (HttpClient client = new HttpClient()){// 创建请求内容var content = new StringContent(jsonData, Encoding.UTF8, "application/json");// 创建 HttpRequestMessage 对象var request = new HttpRequestMessage(HttpMethod.Post, url){Content = content};// 发送请求并指定 HttpCompletionOption.ResponseHeadersReadusing (HttpResponseMessage response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead)){response.EnsureSuccessStatusCode();// 获取响应流using (Stream stream = await response.Content.ReadAsStreamAsync()){// 在这里处理流数据using (var reader = new StreamReader(stream)){string line;while ((line = await reader.ReadLineAsync()) != null){Console.WriteLine(line); // 输出每行数据}}}}}
}