.net Core 和 .net freamwork 调用 deepseek api 使用流输出文本(对话补全)
.net Core 调用 deepseek api 使用流输出文本
- 简
- 下面直接上代码(.net core):
- 最后再贴一个 .net Freamwork 4 可以用的代码
- TLS 的代码至关重要的:(下面这个)
简
在官网里面有许多的案例:我们通过查看下面地址和截图可以发现,有 Csharp(C# 的案例,但是没有具体介绍流的部分)
并在 .net freamwork 环境下,出现报错:网络错误: 请求被中止: 未能创建 SSL/TLS 安全通道。我们在文章最后也贴了解决方案。
https://api-docs.deepseek.com/zh-cn/api/create-chat-completion

下面直接上代码(.net core):
using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;class Program
{// 主函数,程序入口static async Task Main(){// 定义API的URLstring url = "https://api.deepseek.com/chat/completions";// 使用HttpClient发送HTTP请求using (HttpClient client = new HttpClient()){// 创建一个POST请求var request = new HttpRequestMessage(HttpMethod.Post, url);// 设置请求头,接受JSON格式的响应request.Headers.Add("Accept", "application/json");// 设置请求头,添加授权信息request.Headers.Add("Authorization", "Bearer <TOKEN>");// 定义请求数据var data = new{// 定义消息数组,包含系统和用户的消息messages = new[]{new { role = "system", content = "你是一个助手" },new { role = "user", content = "帮我用js写一段冒泡算法" }},// 指定使用的模型model = "deepseek-chat",// 启用流模式stream = true,// 设置最大令牌数max_tokens = 2048,// 设置温度参数temperature = 1};// 将请求数据序列化为JSON格式var json = JsonSerializer.Serialize(data);// 设置请求内容为JSON格式request.Content = new StringContent(json, Encoding.UTF8, "application/json");// 发送请求并获取响应using (var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead)){// 如果响应状态码表示成功if (response.IsSuccessStatusCode){// 读取响应内容作为流using (var stream = await response.Content.ReadAsStreamAsync())using (var reader = new StreamReader(stream)){string line;// 逐行读取流中的数据while ((line = await reader.ReadLineAsync()) != null){// 如果行以"data:"开头if (line.StartsWith("data:")){// 去除"data:"前缀并去除空格var dataStr = line.Substring(5).Trim();// 如果数据不是"[DONE]"if (dataStr != "[DONE]"){try{// 反序列化JSON数据var chunkData = JsonSerializer.Deserialize<JsonElement>(dataStr);// 获取生成的文本内容var content = chunkData.GetProperty("choices")[0].GetProperty("delta").GetProperty("content").GetString();// 如果内容不为空if (!string.IsNullOrEmpty(content)){// 输出内容到控制台Console.Write(content);}}catch (JsonException){// 忽略JSON解析错误}}}}}// 最后换行Console.WriteLine();}else{// 输出请求失败的状态码和内容Console.WriteLine($"请求失败,状态码: {response.StatusCode}");Console.WriteLine(await response.Content.ReadAsStringAsync());}}}}
}
是需要去官网申请的:
访问下面地址:
https://platform.deepseek.com/api_keys

最后再贴一个 .net Freamwork 4 可以用的代码
using System;
using System.IO;
using System.Net;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;class Program
{// 主函数,程序入口static void Main(string[] args){// 设置安全协议,允许TLS 1.2和TLS 1.1ServicePointManager.SecurityProtocol = ((SecurityProtocolType)3072 | (SecurityProtocolType)768 | (SecurityProtocolType)192);// API的URLvar url = "https://api.deepseek.com/chat/completions";// API密钥,需要替换为实际的密钥var apiKey = "<TOKEN>"; // 替换为你的 API Keytry{// 1. 创建请求var request = (HttpWebRequest)WebRequest.Create(url);// 设置请求方法为POSTrequest.Method = "POST";// 设置请求头中的Authorization字段,包含API密钥request.Headers["Authorization"] = $"Bearer {apiKey}";// 设置请求的内容类型为JSONrequest.ContentType = "application/json";// 设置接受的响应类型为JSONrequest.Accept = "application/json";// 2. 准备请求数据var requestData = new{// 消息数组,包含系统消息和用户消息messages = new[]{new { role = "system", content = "你是一个助手" },new { role = "user", content = "你好" }},// 使用的模型model = "deepseek-chat",// 是否流式响应stream = true,// 最大令牌数max_tokens = 2048,// 温度参数temperature = 1};// 将请求数据序列化为JSON字符串var json = JsonConvert.SerializeObject(requestData);// 3. 写入请求体using (var streamWriter = new StreamWriter(request.GetRequestStream())){// 将JSON字符串写入请求体streamWriter.Write(json);// 刷新缓冲区streamWriter.Flush();}// 4. 获取响应(流式)using (var response = (HttpWebResponse)request.GetResponse())using (var stream = response.GetResponseStream())using (var reader = new StreamReader(stream)){// 逐行读取响应内容while (!reader.EndOfStream){var line = reader.ReadLine();if (!string.IsNullOrEmpty(line)){// 如果行以"data:"开头if (line.StartsWith("data:")){// 去除"data:"前缀并去除前后空格var dataStr = line.Substring(5).Trim();// 如果数据不是"[DONE]"if (dataStr != "[DONE]"){try{// 解析JSON并提取contentvar chunkData = JObject.Parse(dataStr);var choices = chunkData["choices"];if (choices != null && choices.HasValues){var delta = choices[0]["delta"];if (delta != null){var contentValue = delta["content"]?.ToString();if (!string.IsNullOrEmpty(contentValue)){// 输出content内容Console.Write(contentValue);}}}}catch (JsonException){// 忽略JSON解析错误}}}}}// 最后换行Console.WriteLine();}}catch (WebException ex){// 处理HTTP错误if (ex.Response != null){using (var errorResponse = (HttpWebResponse)ex.Response)using (var errorStream = errorResponse.GetResponseStream())using (var errorReader = new StreamReader(errorStream)){// 输出错误信息Console.WriteLine($"请求失败,状态码: {errorResponse.StatusCode}");Console.WriteLine(errorReader.ReadToEnd());}}else{// 输出网络错误信息Console.WriteLine($"网络错误: {ex.Message}");}}}
}
TLS 的代码至关重要的:(下面这个)
// 设置安全协议,允许TLS 1.2和TLS 1.1ServicePointManager.SecurityProtocol = ((SecurityProtocolType)3072 | (SecurityProtocolType)768 | (SecurityProtocolType)192);
网络错误: 请求被中止: 未能创建 SSL/TLS 安全通道。

相关文章:
.net Core 和 .net freamwork 调用 deepseek api 使用流输出文本(对话补全)
.net Core 调用 deepseek api 使用流输出文本 简下面直接上代码(.net core):最后再贴一个 .net Freamwork 4 可以用的代码TLS 的代码至关重要的:(下面这个) 简 在官网里面有许多的案例:我们通过…...
[特殊字符] 第十三讲 | 地统计模拟与空间不确定性评估
📘 专栏:科研统计方法实战分享 | 地学/农学人的数据分析工具箱 ✍️ 作者:平常心0715 🎯 关键词:地统计模拟、随机函数、空间不确定性、条件模拟、SGS、R语言 🧠 核心导语 在现实数据有限、空间异质性强的…...
springcloud整理
问题1.服务拆分后如何进行服务之间的调用 我们该如何跨服务调用,准确的说,如何在cart-service中获取item-service服务中的提供的商品数据呢? 解决办法:Spring给我们提供了一个RestTemplate的API,可以方便的实现Http请…...
04-算法打卡-数组-二分查找-leetcode(69)-第四天
1 题目地址 69. x 的平方根 - 力扣(LeetCode)69. x 的平方根 - 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内…...
[Windows] 字体渲染 mactype v2025.4.11
[Windows] 字体渲染 mactype 链接:https://pan.xunlei.com/s/VONeCUP2hEgO5WIQImgtGUmrA1?pwdyruf# 025.4.11 Variable font support 可变字体支持已到来。 本版本将可变字体支持扩展到所有 GDI 应用程序。 所有 win32 程序中的字体,如 Noto Sans、Se…...
VSCode CMake调试CPP程序
文章目录 1 安装C与CMake插件2 配置CMakeLists.txt3 使用CMake编译调试3.1 编译3.2 调试 4 自定义构建调试参考 1 安装C与CMake插件 C插件 CMake插件 2 配置CMakeLists.txt 编写测试程序 #include<iostream>int main(int argc, char const *argv[]) {int a 1, b 2;i…...
MySQL数据过滤、转换与标准化
数据处理是数据库操作的重要组成部分,尤其是在大量数据中查找、转换和规范化目标信息的过程中。为了确保数据的有效性与一致性,MySQL提供了一系列数据过滤、转换与标准化的功能。 本教程将深入探讨数据过滤和转换的基本方法及应用,内容涵盖数…...
Halo 设置 GitHub - OAuth2 认证指南
在当今数字化时代,用户认证的便捷性和安全性愈发重要。对于使用 Halo 搭建个人博客或网站的开发者而言,引入 GitHub - OAuth2 认证能够极大地提升用户登录体验。今天,我们就来详细探讨一下如何在 Halo 中设置 GitHub - OAuth2 认证。 一、为…...
【unity游戏开发——Animator动画】Animator动画状态机复用——重写动画控制器 Animator Override Controller
注意:考虑到UGUI的内容比较多,我将UGUI的内容分开,并全部整合放在【unity游戏开发——Animator动画】专栏里,感兴趣的小伙伴可以前往逐一查看学习。 文章目录 一、状态机复用是什么?二、实战专栏推荐完结 一、状态机复…...
C语言--汉诺塔问题
汉诺塔问题是一个典型的递归问题。 递归问题的基本思想:将问题逐步化简为相同思路但是规模更小的问题,直到问题可以直接解决 递归的关键在于基准情形和递归步骤,基准情形也就是退出条件,递归步骤也就是把问题简化为子问题的过程。…...
301.找出3位偶数
2094. 找出 3 位偶数 - 力扣(LeetCode) class Solution {List<Integer> resnew ArrayList<>();List<Integer> linew ArrayList<>();public int[] findEvenNumbers(int[] digits) {Arrays.sort(digits);boolean[] numsnew boolea…...
使用Python从零开始构建端到端文本到图像 Transformer大模型
简介:通过特征向量从文本生成图像 回顾:多模态 Transformer 在使用Python从零实现一个端到端多模态 Transformer大模型中,我们调整了字符级 Transformer 以处理图像(通过 ResNet 特征)和文本提示,用于视觉…...
comfyui点击执行没反应一例
以前只遇到过执行工作流时出错的情况,从没试过说点了执行后一点反应都没有的情况。 今天下载 蓝色多脑盒《一键同时换头、换脸、发型、发色之双pulid技巧》分享的工作,第一次发现点击执行没反应。 发现左下角的地方连接错乱了。 更正连接后工作流能正常…...
01-libVLC的视频播放器:环境搭建以及介绍
项目展示项目播放器 VLC简介VLC媒体播放器(VideoLAN Client)是一款开源、跨平台的自由多媒体播放器,由VideoLAN项目开发。它支持众多音频与视频格式(如MPEG-2、MPEG-4、H.264、MKV、WebM、WMV、MP3等),以及DVD、VCD和各种流媒体协议。 VLC的特点跨平台支持:Windows、mac…...
用css画一条弧线
ui里有一条弧线,现在用css实现 关键代码 border-bottom-left-radius: 100% 7px 两个参数分别代表横向和纵向的深度border-bottom-right-radius: 100% 7px...
FPGA上实现SD卡连续多块读的命令
在FPGA上实现SD卡连续多块读的命令 CMD17命令一次只能读取1个块 CMD18命令一次可以连续读取多个块,直到停止命令CMD12 CMD18命令读的块数程序可任意设置 目录 前言 一、SD卡多块读命令CMD18 二、停止读命令CMD12 三、SD卡初始化SD卡连续块读操作的verilog代码 …...
从原理图到成品:PCBA设计的常见陷阱与规避方法
在电子设计领域,从原理图到PCBA(Printed Circuit Board Assembly)的转换过程中,布局布线是决定电路性能的关键环节。然而,许多工程师在实际操作中容易陷入一些常见误区,导致信号完整性、EMI(电磁…...
强化学习信用分配——以RLHF为例分析
Section 1. 信用分配简介 在强化学习中,信用分配(Credit Assignment)是指确定某个动作或状态对最终奖励的具体贡献的过程。由于强化学习的奖励通常是延迟的(Delayed Reward),比如围棋,只有在胜…...
.py文件和.ipynb文件的区别:完整教程
一、概述 Python开发者常用的两种文件格式.py和.ipynb各有特点,本教程将通过对比分析、代码示例和场景说明,帮助开发者全面理解二者的区别与联系。 二、核心区别对比 1. 文件格式本质 特性.ipynb文件.py文件文件类型JSON结构化文档纯文本文件存储内容…...
【AI】AI大模型发展史:从理论探索到技术爆发
一、早期探索阶段—理论与技术奠基 1.1 符号主义与连接主义的博弈 20世纪50-70年代,符号主义AI主导研究方向,通过专家系统模拟人类逻辑推理,但受限于计算能力和数据规模。80年代连接主义AI兴起,以神经网络为核心,反向…...
【项目管理】第11章 项目成本管理-- 知识点整理
相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应:第6章-第19章 (二)知识笔记 第11章 项目成本管理 1.管理基础…...
初学STM32之编码器测速以及测频法的实现
资料来着江协科技 这篇是编码器测速,江科大的源码在测速的时候,定时器TIM2是一直在跑的,不受其它控的,它就一直隔1S读一次CNT的值。它也不管是否有输入信号。源码程序修改一下是可以实现对PWM信号以测频法的方式读取。 笔者稍微改…...
Linux 内核知识体系[1]
1 Linux内核知识体系 2.Linux内核学习路线 2.1基础知识准备 操作系统基础:了解操作系统的概念和基本原理,包括进程管理、内存管理、文件系统、输入输出等。 书籍:《操作系统:设计与实现》(Andrew S. Tanenbaum&…...
408 计算机网络 知识点记忆(7)
前言 本文基于王道考研课程与湖科大计算机网络课程教学内容,系统梳理核心知识记忆点和框架,既为个人复习沉淀思考,亦希望能与同行者互助共进。(PS:后续将持续迭代优化细节) 往期内容 408 计算机网络 知识…...
Mac 下载 PicGo 的踩坑指南
Mac 下载 PicGo 的踩坑指南 一、安装问题 下载地址:https://github.com/Molunerfinn/PicGo/releases 下载之后直接安装即可,此时打开会报错:Picgo.app 文件已损坏,您应该将它移到废纸篓。 这是因为 macOS 为了保护用户不受恶意…...
消失的它:揭开 CoreData 托管对象神秘的消失之谜(上)
概述 使用 CoreData 作为 App 持久存储“定海神针”的小伙伴们想必都知道,我们需要将耗时的数据库查询操作乖巧的放到后台线程中,以便让主线程负责的 UI 获得风驰电掣般地享受。 不过,如何将后台线程中查询获得的托管对象稳妥的传送至主线程…...
电流互感器的两相星形接线的建模与仿真
微♥“电击小子程高兴的MATLAB小屋”获取巨额优惠 1.模型简介 本仿真模型基于MATLAB/Simulink(版本MATLAB 2016Rb)软件。建议采用matlab2016 Rb及以上版本打开。(若需要其他版本可联系代为转换) 2.仿真模型 3.仿真结果 3.1一次…...
Day3—循环起来吧
第一章一切从安装有利工具开始 第二章Python基本语法 第三章结构化程序设计 3.1条件语句 3.1.1if语句 只需要判断一个条件,并且在该条件为 True 时执行特定的代码块,而在条件为 F…...
forms+windows添加激活水印
formswindows添加激活水印 多语言水印文本,根据系统语言自动切换。水印显示在每个屏幕的右下角,位置动态调整。半透明灰色文字,微软雅黑字体。窗口无边框、置顶、透明背景,不干扰用户操作。支持多显示器。高DPI适配。 效果图&am…...
014_多线程
多线程 多线程创建线程方式一:继承Thread类方式二:实现Runable接口方式三:实现Callbale接口 Thread的常用方法线程安全线程同步方式一:同步代码块同步方法方式三:Lock锁 线性池创建线程池处理Runnable任务处理Callable…...
