使用C# 调用deepseek api接口,来实现正常访问
先上图,结果如图

先去官方网站充值api费用,默认
对应的C#代码封装
1 public class DeepSeekHelper
2 {
3 private static readonly HttpClient client = new HttpClient();
4 private const string ApiEndpoint = "https://api.deepseek.com/v1/chat/completions";
5 private static readonly string apiKey = "你的apikey";
6 public static async Task<string> CallDeepSeekAPI(string userQuestion)
7 {
8 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
9 try
10 {
11 // 设置请求头
12 client.DefaultRequestHeaders.Clear();
13 client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
14 client.DefaultRequestHeaders.Add("Accept", "application/json");
15
16 // 构建请求体
17 var requestBody = new
18 {
19 model = "deepseek-reasoner", // 根据实际模型调整
20 messages = new[]
21 {
22 new
23 {
24 role = "user",
25 content = userQuestion
26 }
27 },
28 temperature = 0.7
29 };
30
31 // 序列化请求体
32 //var jsonContent = JsonSerializer.Serialize(requestBody);
33 var jsonContent = JsonConvert.SerializeObject(requestBody);
34 var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
35
36 // 发送请求
37 var response = await client.PostAsync(ApiEndpoint, content);
38
39 // 处理响应
40 if (!response.IsSuccessStatusCode)
41 {
42 throw new Exception($"API请求失败: {response.StatusCode}");
43 }
44
45 var responseContent = await response.Content.ReadAsStringAsync();
46 var resultModel = JsonConvert.DeserializeObject<DeepSeekResponse>(responseContent);
47 if (resultModel != null && resultModel.Choices.Count > 0)
48 return resultModel.Choices[0].Message.Content;
49 return responseContent;
50 }
51 catch (Exception ex)
52 {
53 // 处理异常
54 return $"调用API时发生错误: {ex.Message}";
55 }
56 }
57 }
58
59
60
61 public class DeepSeekResponse
62 {
63 public string Id { get; set; }
64 public string Object { get; set; }
65 public long Created { get; set; }
66 public string Model { get; set; }
67 public List<Choice> Choices { get; set; }
68 public Usage Usage { get; set; }
69 public string SystemFingerprint { get; set; }
70
71 // 重写ToString方法以便更好地显示对象信息
72 public override string ToString()
73 {
74 return $"DeepSeekResponse(Id={Id}, Object={Object}, Created={Created}, Model={Model}, Choices={string.Join(", ", Choices)}, Usage={Usage}, SystemFingerprint={SystemFingerprint})";
75 }
76 }
77
78 public class Choice
79 {
80 public int Index { get; set; }
81 public Message Message { get; set; }
82 // 其他Choice相关的属性...
83
84 // 重写ToString方法以便更好地显示Choice信息(这里仅展示Index和Message作为示例)
85 public override string ToString()
86 {
87 return $"Choice(Index={Index}, Message={Message})";
88 }
89 }
90
91 public class Message
92 {
93 public string Role { get; set; }
94 public string Content { get; set; }
95 // 其他Message相关的属性...
96 }
97
98 public class Usage
99 {
100 public int PromptTokens { get; set; }
101 public int CompletionTokens { get; set; }
102 public int TotalTokens { get; set; }
103 // 其他Usage相关的属性,包括嵌套的字典等,可以根据需要添加
104 }
调用示例
private async void SendButton_Click(object sender, RoutedEventArgs e)
{
string requestText = RequestTextBox.Text;
if (!string.IsNullOrWhiteSpace(requestText))
{
try
{ string responseData = await DeepSeekHelper.CallDeepSeekAPI(requestText); // await new DeepSeekApi().CallDeepSeekAPI(chatRequest);
ResponseTextBox.Text = responseData;
}
catch (Exception ex)
{
ResponseTextBox.Text = $"Error: {ex.Message}";
}
}
else
{
MessageBox.Show("Please enter a request.");
}
}
常见问题:
1 发送请求时出错 InnerException = {"请求被中止: 未能创建 SSL/TLS 安全通道。"}
指定使用TLS1.2加密协议,添加如下代码
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
2 收到内容为空白
服务器繁忙,请把deepseek-chat模型切换到deepseek-reasoner 试试,或者换个时间再次尝试.
模型区别如下.代码中默认使用了reasoner模型,俗称满血版.
默认账户赠送10元余额.


使用C# 调用deepseek api接口,来实现正常访问的更多相关文章
- Http下的各种操作类.WebApi系列~通过HttpClient来调用Web Api接口
1.WebApi系列~通过HttpClient来调用Web Api接口 http://www.cnblogs.com/lori/p/4045413.html HttpClient使用详解(java版本 ...
- 关于python调用zabbix api接口
因公司业务需要,引进了自动化运维,所用到的监控平台为zbbix3.2,最近正在学习python,计划使用python调用zabbix api接口去做些事情,如生成报表,我想最基本的是要取得zabbix ...
- WebApi系列~通过HttpClient来调用Web Api接口
回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api ...
- WebApi系列~通过HttpClient来调用Web Api接口~续~实体参数的传递
回到目录 上一讲中介绍了使用HttpClient如何去调用一个标准的Web Api接口,并且我们知道了Post,Put方法只能有一个FromBody参数,再有多个参数时,上讲提到,需要将它封装成一个对 ...
- 通过HttpClient来调用Web Api接口
回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api ...
- 【WebApi】通过HttpClient调用Web Api接口
HttpClient是一个封装好的类,它在很多语言中都有被实现,现在HttpClient最新的版本是4.5. 它支持所有的http方法,自动转向,https协议,代理服务器. 一.Api接口参数标准化 ...
- Java 调用Restful API接口的几种方式--HTTPS
摘要:最近有一个需求,为客户提供一些Restful API 接口,QA使用postman进行测试,但是postman的测试接口与java调用的相似但并不相同,于是想自己写一个程序去测试Restful ...
- python 调用zabbix api接口实现主机的增删改查
python程序调用zabbix系统的api接口实现对zabbix_server端主机的增删改查,使用相关功能时候,需要打开脚本中的相关函数. 函数说明: zabbixtools() 调用zabbi ...
- 大叔也说Xamarin~Android篇~调用远程API接口,发POST请求
回到目录 Xamarin我们在上节已经教大家如何去部署它的环境了,今天来说一个实际的例子,使用android客户调用.net web api的一个接口,并发送POST请求,当服务端回到请求后做出响应, ...
- 通过HttpClient来调用Web Api接口~续~实体参数的传递
并且我们知道了Post,Put方法只能有一个FromBody参数,再有多个参数时,上讲提到,需要将它封装成一个对象进行传递,而这讲主要围绕这个话题来说,接口层添加一个新类User_Info,用来进行数 ...
随机推荐
- tcp全连接满了怎么处理
cat /proc/sys/net/ipv4/tcp_max_syn_backlog #syn队列最大长度 netstat -ntl | grep SYN_RECV | wc -l #syn队列当前长 ...
- 2024御网杯信息安全大赛个人赛wp_2024-11-27
MISC题解 题目附件以及工具链接: 通过网盘分享的文件:御网杯附件 链接: https://pan.baidu.com/s/1LNA6Xz6eZodSV0Io9jGSZg 提取码: jay1 --来 ...
- spring 使用 事件机制
概述 在编写代码的时候,比如我删除一篇文章,这个时候,如果我想做些额外的逻辑,这是就需要修改删除部分的代码.spring 提供了事件机制更优雅的实现这个,用户只需要实现事件监听即可. 代码实现 注入发 ...
- Shape文件格式
Shape文件格式 一个ESRI的shapefile数据包含一个主文件(.shp),一个索引文件(.shx)和一个dBASE(.dbf)表.主文件是直接访问的,变长记录的文件,每一条记录都描述一个形状 ...
- 【字符串哈希+二分】AcWing3508 最长公共子串
题解 首先思考暴力枚举长度为 \(len∈[1, min(strlen(s), strlen(t))]\),最差情况下为字符串 \(s\) 和字符串 \(t\) 全为长度为 \(10000\) 的全英 ...
- postgresql序列重复问题处理
问题 在执行数据插入时,postgresql 提示more than one owned sequence found错误.这个和之前文章中写的序列编号错乱不同,是由数据表的一个列生成了多个序列导致的 ...
- Linux系统安装python3.8与卸载教程
ln -sf /usr/local/python311/bin/python3.11 /usr/local/bin/python3ln -sf /usr/local/python311/bin/pyd ...
- docker使用镜像报错:standard_init_linux.go:211: exec user process caused “exec format error“
在服务器使用镜像运行代码时出现了该报错.使用了docker run 后,由于是刚接触docker,不知道是什么原因.经网上查阅资料后,了解到原来有可能是我的镜像架构和机器架构不一致. 使用 docke ...
- rpc-java 生成代码路径设置
<plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf- ...
- 【转载】基于timestamp和nonce的防重放攻击
https://www.cnblogs.com/mymelody/p/7325325.html 以前总是通过timestamp来防止重放攻击,但是这样并不能保证每次请求都是一次性的.今天看到了一篇 ...