最近有一个钉钉的项目,所以,接下来的日子里,我会把钉钉开发中遇到的问题都整理成博客,供大家参考。

钉钉开发者后台,添加好了小程序,需要提供一个回调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 开发钉钉回调事件的更多相关文章

  1. 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 ...

  2. [转]ASP.NET Core 开发-Logging 使用NLog 写日志文件

    本文转自:http://www.cnblogs.com/Leo_wl/p/5561812.html ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 . ...

  3. ASP.NET Core 开发-中间件(Middleware)

    ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...

  4. ASP.NET Core开发-Docker部署运行

    ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...

  5. ASP.NET Core开发-后台任务利器Hangfire使用

    ASP.NET Core开发系列之后台任务利器Hangfire 使用. Hangfire 是一款强大的.NET开源后台任务利器,无需Windows服务/任务计划程序. 可以使用于ASP.NET 应用也 ...

  6. ASP.NET Core开发-读取配置文件Configuration

    ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配置系统已经和之前版本的ASP.NET有所不同了,之前是依赖于System.Configuration和XML ...

  7. 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 ...

  8. ASP.NET Core 开发-Logging 使用NLog 写日志文件

    ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 .NET Core 和 ASP.NET Core . ASP.NET Core已经内置了日志支持,可以 ...

  9. ASP.NET Core 开发-中间件(StaticFiles)使用

    ASP.NET Core 开发,中间件(StaticFiles)的使用,我们开发一款简易的静态文件服务器. 告别需要使用文件,又需要安装一个web服务器.现在随时随地打开程序即可使用,跨平台,方便快捷 ...

  10. 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 ...

随机推荐

  1. 在linux环境中安装node,npm,express

    linux安装node 连接运程命令: 进入usr/local 文件夹 cd /usr/local 1.下载 wget https://nodejs.org/dist/v14.17.6/node-v1 ...

  2. 055_Lightning Lightning 组件基础知识

    Lightning框架简介 Lightning框架是Salesforce提供的一套基于用户界面的开发框架,对于开发单页面应用(Single Page Application)有很大的帮助.它和Visu ...

  3. 【Java】生成随机字符串

    package com.runsky.utils; import java.util.Random; public class GetRandom { private static final Str ...

  4. python菜鸟学习: 6. 字典常用方法

    # -*- coding: utf-8 -*-dict1 = {"name": "liyuzhoupan", "age": "22 ...

  5. IDEA导出带源码的war包

    做作业时实验要求导出带源码的war包,网上找了一圈没找着,遂自行探索,摸出了些门道,在此分享. File->Project Structure->Project Setting->A ...

  6. shell_Day02

    虽然差了不少天,但的确是第......一天 history 查看历史命令记录 !命令序号 查看命令并执行 -c 清空 关于命令历史的文件 关于命令历史的变量(环境变量) 命令补全 tab:制表符 \t ...

  7. Windows相关产品密钥

    Win7/Win8/Win10系统下Visual Studio 2013各个版本的密钥:Visual Studio Ultimate 2013: BWG7X-J98B3-W34RT-33B3R-JVY ...

  8. BASE64编码作业

    BASE64编码作业 什么是BASE64编码 ase64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RF ...

  9. 安装filebeat

    Filebeat是本地文件的日志数据采集器. 作为服务器上的代理安装,Filebeat监视日志目录或特定日志文件,tail file,并将它们转发给Elasticsearch或Logstash进行索引 ...

  10. UE4 编辑器的非运行时,给StaticMeshActor设置StaticMesh

    用 UAssetManager::GetStreamableManager().LoadSynchronous<UStaticMesh>(FSoftObjectPath(packagePa ...