DingTalk钉钉消息推送(.net core 3 WebApi尝鲜记)
1.netcore3.0 webapi集成Swagger 5.0
2.DingTalk钉钉消息推送(.net core 3 WebApi尝鲜记)
3..net core 3.1 webapi后端接收钉钉小程序post的文件/图片4.asp.net core 3.1 webapi FileContentResult 5.一次asp.net core3.1打造webapi开发框架的实践6..net core3.1项目在centos7.6上部署经验7.ZR.Admin小改和VUE3版本体验8.我的微服务之路,看我搭建dapr趟过的坑9.42岁大龄程序员的迷茫,看我最新尝鲜.net 5+Dapper搭建的WebAPI框架10.Kestrel服务器ASP.NetCore 3.1程序启用SSL11.Asp.Net Core 下 Newtonsoft.Json 转换字符串 null 替换成string.Empty(转)12.ApiResult-WebAPI开发统一返回值对象的演化(.net core版) 13.体验.net core 3.1 socket我发了个朋友圈,Swagger真他妈的牛B,解放了开发API的码农,麻麻再也不用担心我们写API文档耽误回家吃饭了。
/// <summary> /// 发送钉钉消息 /// </summary> /// <param name="toUser">Employee的userid,多个使用|分隔</param> /// <param name="title">标题</param> /// <param name="content">发送内容</param> /// <param name="sourceUrl">消息向导地址</param> /// <returns></returns> private ApiResult SendCardMessageToEmployee(string toUser, string title, string content, string sourceUrl) { var result = new ApiResult { Success = false, ResponseDatetime = DateTime.Now.ToString(), ResultMessage = "操作失败!", ResultObject = null }; try { toUser = toUser.Trim('|'); string JSONData = "{\"touser\":\"" + toUser + "\",\"toparty\":\"\",\"agentid\":\"" + _settings.Value.sendmessage_agentid + "\",\"msgtype\":\"action_card\",\"action_card\":{\"title\":\"" + title + "\",\"markdown\":\"<font size=7 face=\'黑体\'>DingTalk中间件提醒: </font> \n \n " + content + "\r \n " + "\r \n " + "\r \n " + DateTime.Now.ToString() + "\",\"single_title\": \"查看详情\",\"single_url\": \"" + sourceUrl + "\"}}"; var access_token = GetAccessToke(); var tokenObj = access_token.ResultObject as AccessToken; string url = "https://oapi.dingtalk.com/message/send?access_token=" + tokenObj.access_token; string response = GetResponseData(JSONData, url); result.ResultObject = response; result.Success = string.IsNullOrEmpty(response); result.ResultMessage = "API调用成功!Requst Url:[" + url + "],Content:[" + JSONData + "]"; } catch (Exception ex) { result.ResultObject = ex; _logger.LogError(ex, ex.Message, new object[] { }); } return result; } /// <summary> /// 发送钉钉消息 /// </summary> /// <param name="toUser">Employee的userid,多个使用|分隔</param> /// <param name="content">发送内容</param> /// <param name="sourceUrl">发送内容</param> /// <returns></returns> private ApiResult SendMediaMessageToEmployee(string toUser, string content, string sourceUrl) { var result = new ApiResult { Success = false, ResponseDatetime = DateTime.Now.ToString(), ResultMessage = "操作失败!", ResultObject = null }; try { toUser = toUser.Trim('|'); string JSONData = "{\"touser\":\"" + toUser + "\",\"toparty\":\"\",\"agentid\":\"" + _settings.Value.sendmessage_agentid + "\",\"" + content + ",\"single_title\": \"查看详情\",\"single_url\": \"" + sourceUrl + "\"}}"; var access_token = GetAccessToke(); var tokenObj = access_token.ResultObject as AccessToken; string url = "https://oapi.dingtalk.com/message/send?access_token=" + tokenObj.access_token; string response = GetResponseData(JSONData, url); result.ResultObject = response; result.Success = string.IsNullOrEmpty(response); result.ResultMessage = "API调用成功!Requst Url:[" + url + "],Content:[" + JSONData + "]"; } catch (Exception ex) { result.ResultObject = ex; _logger.LogError(ex, ex.Message, new object[] { }); } return result; } /// <summary> /// 给指定员工发送钉钉消息1 /// </summary> /// <param name="userid">指定员工的职员ID</param> /// <param name="title">标题</param> /// <param name="content">发送内容</param> /// <param name="sourceUrl">消息向导地址</param> /// <returns></returns> [HttpGet] [HttpPost] public ApiResult SendDingTalkMessage(string userid, string title, string content, string sourceUrl = "http://www.cquni.com") { if (string.IsNullOrEmpty(title)) title = "通知"; var result = new ApiResult { Success = false, ResponseDatetime = DateTime.Now.ToString(), ResultMessage = "操作失败!", ResultObject = null }; try { var rs = SendCardMessageToEmployee(userid, title, content, sourceUrl); result.Success = rs.Success; result.ResultMessage = rs.ResultMessage; result.ResultObject = rs.ResultObject; } catch (Exception ex) { result.ResultObject = ex; } return result; }
/// <summary> /// 给指定员工发送钉钉消息2 /// </summary> /// <param name="departmentName">部门名称</param> /// <param name="employeeName">人员姓名</param> /// <param name="title">消息标题</param> /// <param name="content">消息内容</param> /// <param name="sourceUrl">url</param> /// <returns></returns> [HttpGet] [HttpPost] public ApiResult SendDingTalkMessageExt(string departmentName, string employeeName, string title, string content, string sourceUrl = "http://www.cquni.com") { var result = new ApiResult { Success = false, ResponseDatetime = DateTime.Now.ToString(), ResultMessage = "操作失败!", ResultObject = null }; if (string.IsNullOrEmpty(title)) title = "通知"; var deptment = GetDepartmentInfo().department; if (deptment != null && deptment.Count > 0) { var currDept = deptment.Where(d => d.name.Contains(departmentName)).FirstOrDefault(); if (currDept == null) { result.ResultMessage = "获取人员的部门信息出错,输入部门名称:" + departmentName; } else { var employeeList = GetDepartmentEmployeeList(currDept).userlist; if (employeeList != null && employeeList.Count > 0) { var currentEmp = employeeList.Where(e => e.name.Contains(employeeName)).FirstOrDefault(); try { var rs = SendCardMessageToEmployee(currentEmp.userid, title, content, sourceUrl); return rs; } catch (Exception ex) { _logger.LogError(ex.Message, new object[] { ex, ex.InnerException }); } } else { result.ResultMessage = string.Format("很奇怪,这个部门'{0}'一个人也没有!", departmentName); } } } else { result.ResultMessage = "获取公司部门信息出错!"; } return result; } /// <summary> /// 给指定员工发送钉钉消息(支持图文,文件,图片等格式) /// </summary> /// <param name="departmentName">部门名称</param> /// <param name="employeeName">人员姓名</param> /// <param name="mediaContent">消息内容 eg: "msgtype": "voice","voice": {"media_id": "MEDIA_ID","duration": "10" } /// 格式说明请看钉钉官网文档 https://ding-doc.dingtalk.com/doc#/serverapi2/ye8tup </param> /// <param name="sourceUrl"></param> /// <returns></returns> [HttpGet] [HttpPost] public ApiResult SendDingTalkMediaMessage(string departmentName, string employeeName, string mediaContent, string sourceUrl = "http://www.cquni.com") { var result = new ApiResult { Success = false, ResponseDatetime = DateTime.Now.ToString(), ResultMessage = "操作失败!", ResultObject = null }; var deptment = GetDepartmentInfo().department; if (deptment != null && deptment.Count > 0) { var currDept = deptment.Where(d => d.name.Contains(departmentName)).FirstOrDefault(); if (currDept == null) { result.ResultMessage = "获取人员的部门信息出错,输入部门名称:" + departmentName; } else { var employeeList = GetDepartmentEmployeeList(currDept).userlist; if (employeeList != null && employeeList.Count > 0) { var currentEmp = employeeList.Where(e => e.name.Contains(employeeName)).FirstOrDefault(); try { var rs = SendMediaMessageToEmployee(currentEmp.userid, mediaContent, sourceUrl); return rs; } catch (Exception ex) { _logger.LogError(ex.Message, new object[] { ex, ex.InnerException }); } } else { result.ResultMessage = string.Format("很奇怪,这个部门'{0}'一个人也没有!", departmentName); } } } else { result.ResultMessage = "获取公司部门信息出错!"; } return result; }
作者:数据酷软件
出处:https://www.cnblogs.com/datacool/p/11813202.html
关于作者:20年编程从业经验,持续关注MES/ERP/POS/WMS/工业自动化
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明。
联系方式: qq:71008973;wx:6857740733
基于人脸识别的考勤系统 地址: https://gitee.com/afeng124/viewface_attendance_ext
自己开发安卓应用框架 地址: https://gitee.com/afeng124/android-app-frame
WPOS(warehouse+pos) 后台演示地址: http://47.239.106.75:8080/
合集:
.net core随笔
分类:
程序设计
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2011-11-07 C#扩展方法试用