钉钉回调事件-asp.net core 开发钉钉回调事件
最近有一个钉钉的项目,所以,接下来的日子里,我会把钉钉开发中遇到的问题都整理成博客,供大家参考。
钉钉开发者后台,添加好了小程序,需要提供一个回调URL地址,用于数据的同步。如下图

根据钉钉提供的demo,可以很方便的实现数据的加密和解密,一切进展非常顺利。但在获取POST密文过程中,遇到了一个问题。
钉钉推送过来有三个参数:signature, timestamp, nonce,还有一个消息体:encrypt,三个参数获取正常,就是在获取这个消息体时,一直出错,导致验证回调URL不成功。那么也就不能获取到相应的推送事件。
经过多方测试,无果,查了网上资料,无果,实在没有办法下,自己电脑做了个内网穿透,直接把回调URL地址设在本机,直接VS打开调试查找问题。

问题就出在这个读取的方法上,原本用stream.Read()一直出错,换成异步的,就成功了。
完整代码如下:
public Dictionary<String, String> Index(string signature, string timestamp, string nonce)
{
//获取三个参数
DingTalkEncryptor ding = new DingTalkEncryptor(vdsets.token,vdsets.encodingAesKey,vdsets.corpId);
//接收encrypt参数
string encryptStr = GetPostParam();
////解密内容
string plainText = ding.getDecryptMsg(signature, timestamp, nonce, encryptStr);
Hashtable tb = (Hashtable)JsonConvert.DeserializeObject(plainText, typeof(Hashtable));
//获取事件
string eventType = tb["EventType"].ToString();
//下面是根据事件名称进行相应的业务处理 //返回success
var msg = ding.getEncryptedMap("success");
return msg;
} public string GetPostParam()
{
Stream stream = HttpContext.Request.Body;
byte[] buffer = new byte[HttpContext.Request.ContentLength.Value];
stream.ReadAsync(buffer, 0, buffer.Length);
string content = Encoding.UTF8.GetString(buffer);
return content.ToString().Replace("{\"encrypt\":\"", "").Replace("\"}", "");
}
上面代码用到了钉钉提供的demo,下载地址:
GitHub - open-dingtalk/dingtalk-callback-Crypto: 钉钉回调加解密类库和对应demo
钉钉回调事件-asp.net core 开发钉钉回调事件的更多相关文章
- C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式
C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...
- [转]ASP.NET Core 开发-Logging 使用NLog 写日志文件
本文转自:http://www.cnblogs.com/Leo_wl/p/5561812.html ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 . ...
- ASP.NET Core 开发-中间件(Middleware)
ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...
- ASP.NET Core开发-Docker部署运行
ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...
- ASP.NET Core开发-后台任务利器Hangfire使用
ASP.NET Core开发系列之后台任务利器Hangfire 使用. Hangfire 是一款强大的.NET开源后台任务利器,无需Windows服务/任务计划程序. 可以使用于ASP.NET 应用也 ...
- ASP.NET Core开发-读取配置文件Configuration
ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配置系统已经和之前版本的ASP.NET有所不同了,之前是依赖于System.Configuration和XML ...
- ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First
ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...
- ASP.NET Core 开发-Logging 使用NLog 写日志文件
ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 .NET Core 和 ASP.NET Core . ASP.NET Core已经内置了日志支持,可以 ...
- ASP.NET Core 开发-中间件(StaticFiles)使用
ASP.NET Core 开发,中间件(StaticFiles)的使用,我们开发一款简易的静态文件服务器. 告别需要使用文件,又需要安装一个web服务器.现在随时随地打开程序即可使用,跨平台,方便快捷 ...
- ASP.NET Core 开发 - Entity Framework (EF) Core
EF Core 1.0 Database First http://www.cnblogs.com/linezero/p/EFCoreDBFirst.html ASP.NET Core 开发 - En ...
随机推荐
- vue项目中配置svg图标 cli3路径
1 添加依赖 npm install svg-sprite-loader file-loader -D 2 在components目录下新增一个IconSvg.vue文件 <template&g ...
- 实验:STM32F103烧写支持Arduino
1.搭建烧写环境 烧写器:ST-LINK. 2.启动stm32 flash烧写工具 3.连接识别CPU 4.打开generic-boot20_pc13.bin 5.烧写程序 6.查上miniUS ...
- HCIP-ICT实战进阶02-OSPF特殊区域及其他特性
HCIP-ICT实战进阶02-OSPF特殊区域及其他特性 1 ospf区域 如果ospf只有单个区域, 会有什么问题? 如果只有当个区域, 该区域设备数量如果比较多, 对应一类LSA数量可能较少, 但 ...
- <鸳鸯刀>&<白马啸西风>随笔
这两部作品比较小众,也不如之前的作品优秀,因此简单写一下好了. <鸳鸯刀> 陕西西安府威信镖局的总镖头."铁鞭镇八方"周威信,带领一支七十多人的镖队正前往京城.路途之上 ...
- POJ--1852-c++实现
因为蚂蚁的朝向不明确,所以,可以根据需要假定朝向方向 首先,当每只蚂蚁朝着离自己最近的端点前进,且不回头则,所需总时间最少 当每只蚂蚁朝着离自己最远的端点前进,所需时间最多,在这期间,会碰到其他蚂蚁, ...
- linux下使用bt-rm 限速删除文件
下载限速删除工具: 链接:https://pan.baidu.com/s/1xXu4Hzr99wLlipqxVkXkBg 密码:upbe nohup ./bt-rm -l 10 ${文件地址} &am ...
- arm开发环境搭建
1.smaba 在Linux PC安装smaba sudo apt-get install samba编辑/etc/samba/smb.conf配置:[yz]path = /home/yzv ...
- 前端常用函数(find、includes、filter、Set、forEach、map、some、every、findIndex、splice、reduce)
https://blog.csdn.net/qq_24280125/article/details/119275109 array.join(separator) .拼接返回字符串 参数 separa ...
- 操作系统|03.Linux基础(2)
Linux基础(二) 3.vim编辑器 命令模式:控制光标移动,对文本进行删除.复制.粘贴等工作.编辑模式:正常的文本录入.末行模式:保存.退出和设置编辑环境. 3.1命令模式常用命令 -r:恢复系统 ...
- vue element tree 上移下移
效果图 需求是:上边没有了应该取最后一个 下边没有了 应该取第一个 直接上代码: <template> <el-tree :key="tree_key" v ...