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

news2025/1/17 13:03:09

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 byte[102];
        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 byte[20];
    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 - 博客园

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2278009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ResNet (Residual Network) - 残差网络:深度卷积神经网络的突破

一、引言 在计算机视觉领域&#xff0c;图像识别一直是一个核心且具有挑战性的任务。随着深度学习的发展&#xff0c;卷积神经网络&#xff08;CNN&#xff09;在图像识别方面取得了显著的成果。然而&#xff0c;随着网络深度的增加&#xff0c;出现了梯度消失或梯度爆炸等问题…

C#--在多线程中使用任务并行库(TPL)--15

目录 一.任务并行库的概念以及定义 二.主要特性 三.代码使用示例 1.最基础的Parallel.For使用方式 2.使用 ParallelOptions 来控制并行执行 3.Parallel.ForEach的使用(用于处理集合) 4.带有本地变量的并行循环(用于需要累加或统计的场景) 5.结合Task和Parallel的高级示…

python 寻找数据拐点

import numpy as np import cv2 from scipy.signal import find_peaks# 示例数据 y_data [365.63258786, 318.34824281, 258.28434505, 228.8913738, 190.87220447, 158.28434505, 129.53035144, 111.95846645, 111.95846645, 120.26517572, 140.71246006, 161.79872204, 180.…

论文笔记-arXiv2025-A survey about Cold Start Recommendation

论文笔记-arXiv2025-Cold-Start Recommendation towards the Era of Large Language Models: A Comprehensive Survey and Roadmap 面向大语言模型&#xff08;LLMs&#xff09;时代的冷启动推荐&#xff1a;全面调研与路线图1.引言2.前言3.内容特征3.1数据不完整学习3.1.1鲁棒…

设计模式03:行为型设计模式之策略模式的使用情景及其基础Demo

1.策略模式 好处&#xff1a;动态切换算法或行为场景&#xff1a;实现同一功能用到不同的算法时和简单工厂对比&#xff1a;简单工厂是通过参数创建对象&#xff0c;调用同一个方法&#xff08;实现细节不同&#xff09;&#xff1b;策略模式是上下文切换对象&#xff0c;调用…

飞机电气系统技术分析:数字样机技术引领创新

现代飞机正向着更安全、环保和经济的方向发展&#xff0c;飞机系统的设计日益复杂&#xff0c;对各子系统的性能和可靠性也提出了更高要求。作为飞机的重要组成部分&#xff0c;电气系统&#xff08;Electrical System&#xff0c;ES&#xff09;不仅负责为各类机载设备提供稳定…

(01)FreeRTOS移植到STM32

一、以STM32的裸机工程模板 任意模板即可 二、去官网上下载FreeRTOS V9.0.0 源码 在移植之前&#xff0c;我们首先要获取到 FreeRTOS 的官方的源码包。这里我们提供两个下载 链 接 &#xff0c; 一 个 是 官 网 &#xff1a; http://www.freertos.org/ &#xff0c; 另…

【Unity-Game4Automation PRO 插件】

Game4Automation PRO 插件 是一个用于 Unity 引擎 的工业自动化仿真工具&#xff0c;它提供了对工业自动化领域的仿真和虚拟调试支持&#xff0c;特别是在与工业机器人、生产线、PLC 系统的集成方面。该插件旨在将工业自动化的实时仿真与游戏开发的高质量 3D 可视化能力结合起来…

element select 绑定一个对象{}

背景&#xff1a; select组件的使用&#xff0c;适用广泛的基础单选 v-model 的值为当前被选中的 el-option 的 value 属性值。但是我们这里想绑定一个对象&#xff0c;一个el-option对应的对象。 <el-select v-model"state.form.modelA" …

mybatis延迟加载、缓存

目录 一、所需表 二、延迟加载 1.延迟加载概念 2.立即加载和延迟加载的应用场景 3.多对一延迟加载查询演示 (1)实体类 User Account (2)AccountMapper接口 (3)AccountMapper.xml (4)UserMapper接口 (5)UserMapper.xml (6)在总配置文件(mybatis-config.xml)中开启延…

VIVADO FIFO (同步和异步) IP 核详细使用配置步骤

VIVADO FIFO (同步和异步) IP 核详细使用配置步骤 目录 前言 一、同步FIFO的使用 1、配置 2、仿真 二、异步FIFO的使用 1、配置 2、仿真 前言 在系统设计中&#xff0c;利用FIFO&#xff08;first in first out&#xff09;进行数据处理是再普遍不过的应用了&#xff0c…

一、1-2 5G-A通感融合基站产品及开通

1、通感融合定义和场景&#xff08;阅读&#xff09; 1.1通感融合定义 1.2通感融合应用场景 2、通感融合架构和原理&#xff08;较难&#xff0c;理解即可&#xff09; 2.1 感知方式 2.2 通感融合架构 SF&#xff08;Sensing Function&#xff09;&#xff1a;核心网感知控制…

某政务行业基于 SeaTunnel 探索数据集成平台的架构实践

分享嘉宾&#xff1a;某政务公司大数据技术经理 孟小鹏 编辑整理&#xff1a;白鲸开源 曾辉 导读&#xff1a;本篇文章将从数据集成的基础概念入手&#xff0c;解析数据割裂给企业带来的挑战&#xff0c;阐述数据集成的重要性&#xff0c;并对常见的集成场景与工具进行阐述&…

【MySQL】使用C语言链接

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;MySQL 目录 一&#xff1a;&#x1f525; MySQL connect &#x1f98b; Connector / C 使用&#x1f98b; mysql 接口介绍&#x1f98b; 完整代码样例 二&#xff1a;&#x1f525; 共勉 一&#…

《Java核心技术II》并行流

并行流 从集合中获取并行流&#xff1a;Stream paralleWords words.parallelStream(); parallel方法将任意顺序流转换为并行流&#xff1a;Stream paralleWords Stream.of(wordArray).parallel(); 以下是不好的示范&#xff0c;假设对字符串的所有短单词计数&#xff1a; …

【Rust自学】13.2. 闭包 Pt.2:闭包的类型推断和标注

13.2.0. 写在正文之前 Rust语言在设计过程中收到了很多语言的启发&#xff0c;而函数式编程对Rust产生了非常显著的影响。函数式编程通常包括通过将函数作为值传递给参数、从其他函数返回它们、将它们分配给变量以供以后执行等等。 在本章中&#xff0c;我们会讨论 Rust 的一…

ETW HOOK[InfinityHook]技术解析

文章目录 概述分析过程参考资料 概述 ETW是操作系统为了对系统调用、异常等信息做了一个日志操作&#xff0c;本质就是在进行调用这些中断、异常、系统调用时会走向这个代码函数区域日志保存的功能。而ETW HOOK就是在驱动层微软的PatchGuard并未对其做到很好的检测&#xff0c…

码编译安装httpd 2.4,测试

下载链接&#xff1a;https://dlcdn.apache.org/httpd/httpd-2.4.62.tar.gz [rootopenEuler-1 ~]# yum install gcc gcc-c make -y [rootopenEuler-1 ~]# ll /root total 9648 -rw-------. 1 root root 920 Jan 10 17:15 anaconda-ks.cfg -rw-r--r-- 1 root root 9872432…

步入响应式编程篇(一)

响应式编程 为什么要有响应式编程&#xff1f;响应式编程的用法Flow api的用法处理器 为什么要有响应式编程&#xff1f; 传统编码&#xff0c;操作流程常见的是命令式编程范式&#xff0c;如对于一个请求或操作来说&#xff0c;都是串行执行&#xff0c;直到异常或执行结束&a…

C++—18、C++ 中如何写类

一、类的功能阐述 今天我们将用目前学到的类的基础知识从头开始编写一个类。只编写一个基本的Log类&#xff0c;来演示到目前为止我们学过的一些基本特性。随着接下来的学习你会看到从一个类的基本版本到一个更高级版本的过程和区别。高级版本可以做同样的事情&#xff0c;但可…