C# .NetCore 使用 Flurl.Http 与 HttpClient 请求处理流式响应

AI对话接口采用流式返回:

1、使用Flurl处理返回的数据流

using Flurl;

using Flurl.Http;

HttpPost

public async Task<string> GetLiushiChatLaw()

{

//1、请求参数,根据实际情况

YourModel request = new YourModel();string allStr = "";   string chatLawApiUrl = "http://请求地址";

//2、请求。接收类型流Stream,处理请求响应

using (var stream = await chatLawApiUrl.WithHeader("Content-Type", "application/json")

.SetQueryParams(new { access_token = "token" })

.PostJsonAsync(request)

.ReceiveStream())

{

// 逐块读取并处理响应内容

var buffer = new byte102;

int bytesRead;

while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0)

{

// 3、结果转换为字符串

string content = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);

allStr += content;

_logger.LogInformation(content);

}

}

return allStr;

}

2、HttpClient方式

public async Task<string> TestStream()

{

string url = "http://localhost:9291/api/Duix/GetStream";

string allStr = "";

DuixRequest duixRequest = new DuixRequest()

{

sid = "1234567890",

dh_question = "你好",

dh_conversation_id = "1234567890",

};

var client = new HttpClient();

using HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, url);

var response = await client.SendAsync(httpRequestMessage, HttpCompletionOption.ResponseHeadersRead);

await using var stream = await response.Content.ReadAsStreamAsync();

var bytes = new byte20;

int writeLength = 0;

string result = "";

while ((writeLength = stream.Read(bytes, 0, bytes.Length)) > 0)

{

string content = Encoding.UTF8.GetString(bytes, 0, writeLength);

result = result + content;

Console.Write(Encoding.UTF8.GetString(bytes, 0, writeLength));

}

Console.WriteLine();

Console.WriteLine("END");

return result;

}

参考文章:

C# 使用Flurl http请求处理流式响应 - ziff123 - 博客园

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
椒颜皮皮虾྅18 小时前
让文档不止于文字:DeploySharp + PP-Structure,打通版面分析与表格重建
开发语言·学习·c#·.net·cuda
sunyuliang20 小时前
从 axios 写法到服务端治理:AxiosNet 与 HttpClient / Refit / RestSharp / Flurl 的横向对比
httpclient·webapi
椒颜皮皮虾྅20 小时前
一套 C# 接口,解锁四类视觉任务:DeploySharp 分类、分割、关键点与旋转框实战
开发语言·分类·c#
罗迪尼亚的熔岩21 小时前
联合kuka机器人, 海康visonmaster 的手眼9点标定方法
机器人·c#·工业相机·标定
她说彩礼65万21 小时前
C# TaskCompletionSource
java·开发语言·c#
泛凡(Linyongui)2 天前
基于 CW32L010 的智能厨卫调温旋钮方案--低成本 EC21 编码旋钮全解析
单片机·嵌入式硬件·c#
暴走约伯2 天前
【VFX工具链源码拆解 02】告别机械劳动(上):一键统改百个子粒子颜色与批量重命名
3d·unity·c#·材质
信息安全失业大专人员2 天前
每日了解一个智能体-WorkBuddy
开发语言·ai·c#·智能体
呆呆敲代码的小Y2 天前
【实战精选面试题】C# 面试题详细解答,按难易程度排序
android·java·游戏·c#·游戏开发·unity面试题·c#面试题
淡海水2 天前
09-01-内存-Unity资源生命周期全景
unity·c#·游戏引擎·.netcore·gc