钉钉回调事件-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 ...
随机推荐
- ARC(Automatic Reference Counting)自动引用计数 unowned、weak 使用区别
自动引用计数 引用类型(类.函数.闭包) 当声明一个变量指向某个引用类型时 当前引用类型的引用计数就会加1 当变量不指向该类型时 引用类型就会 -1 当引用计数为0时 当前引用类型就会被系统回收 i ...
- TypeScript Map 对象
TypeScript Map 对象 Map 对象保存键值对,并且能够记住键的原始插入顺序. 任何值(对象或者原始值) 都可以作为一个键或一个值. Map 是 ES6 中引入的一种新的数据结构,可以参考 ...
- MYSQL实现排名函数RANK,DENSE_RANK和ROW_NUMBER
1. 排名分类 1.1 区别RANK,DENSE_RANK和ROW_NUMBER RANK并列跳跃排名,并列即相同的值,相同的值保留重复名次,遇到下一个不同值时,跳跃到总共的排名. DENSE_RAN ...
- js-3part-Javascript使用Ajax
getElementsByName使用方法如下是input标签,我们尝试从里面获取到csrf的value值. 这个csrf标签,是隐藏的,在浏览器页面element可以看到,在html源码里面,是看不 ...
- 最简单明了的yield from解释
def one(): print('one start') res = yield from two() print('function get res: ', res) return 'one' + ...
- Unity 简易聊天室(基于TCP)(1)
为了准备毕业设计,学习了服务器与客户端之间传输的一些简单的知识,并跟着网络上的教程制作了一个简易的Unity聊天室 服务器:用C# .Net Framework写的 结构分为:main(主函数).Se ...
- Mysql学习:1、mysql安装及配置及连接Navicat
1.下载地址: https://dev.mysql.com/downloads/windows/installer/8.0.html 2.安装流程: a.选自定义安装:custom. b. 在下一步的 ...
- STM32工程建立
STM32工程建立 对于用keil5建立stm32工程有两种方法,一种在学习过程中比较方便的建立方式:我们称为工程方式一,另一个便是在实际工程中用的最多,也最普遍,在实际过程中用的最多的,我们称为工程 ...
- K Smallest In Unsorted Array
Find the K smallest numbers in an unsorted integer array A. The returned numbers should be in ascend ...
- MySQL Atlas 读写分离软件介绍
MySQL Atlas介绍 目录 MySQL Atlas介绍 一.MySQL Atlas介绍 1.1.1 MySQL Atlas介绍 1.1.2 Atlas基本管理 一.MySQL Atlas介绍 1 ...