C# markdown 实操(用于钉钉的消息通知)
先上效果:
再上代码(只有markdown的部分):
StringBuilder content = new StringBuilder(); content.Append("**销售订单系统提醒:**"); content.Append("\n\n");//换行 content.Append("------"); //下划线 content.Append("\n\n");//换行 content.Append(txtSendContent.Text); content.Append("\n\n ");//多个\n只能换一行,加上一个空格即可辅助完成换行 content.Append("\n\n"); content.Append("<br>"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); var sr = m_DingDingHelper.SendActionCardMessageToUser("销售订单管理系统", content.ToString(), "查看详情", "https://ding-doc.dingtalk.com/", txtusesid.Text);
DingDingHelper类自己封装的,仅用于参考,功能很少,大家见谅
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace DingDingAPP { public class DingDingHelper { string appkey = "*****"; string appsecret = "******"; string agentid = "*****"; string corpId = "******";//企业号 string AccessToken = String.Empty; #region 通过免登授权码和access_token获取用户的userid public string GetUserIdByCode(string code) { GetToken(); if (string.IsNullOrWhiteSpace(AccessToken) || string.IsNullOrWhiteSpace(code)) return ""; try { string AccessUrl = string.Format("https://oapi.dingtalk.com/user/getuserinfo?access_token={0}&code={1}", AccessToken, code); //请求获取token GET方式 Newtonsoft.Json.Linq.JToken json = Newtonsoft.Json.Linq.JToken.Parse(HttpHelper.HttpGet(AccessUrl, null)); return json["userid"].ToString(); } catch (Exception ex) { return ""; } } #endregion #region 根据手机号获取用户id /// <summary> /// 根据手机号获取用户id /// </summary> /// <param name="phoneNumber">用户手机号</param> /// <returns></returns> public string GetUserIdByPhoneNumber(string phoneNumber) { GetToken(); if (string.IsNullOrWhiteSpace(AccessToken) || string.IsNullOrWhiteSpace(phoneNumber)) return ""; string MessageUrl = String.Format("https://oapi.dingtalk.com/user/get_by_mobile?access_token={0}&mobile={1}", AccessToken, phoneNumber); try { var sr = HttpHelper.HttpGet(MessageUrl, null); //Newtonsoft.Json.Linq.JToken json = Newtonsoft.Json.Linq.JToken.Parse(sr); return sr;// json["userid"].ToString(); } catch (Exception ex) { return ""; } } #endregion #region 根据用户id获取用户详细信息 /// <summary> /// 根据用户id获取用户详细信息 /// </summary> /// <param name="userid">用户id</param> /// <returns></returns> public string GetUseInfoByUid(string userid) { GetToken(); if (string.IsNullOrWhiteSpace(AccessToken) || string.IsNullOrWhiteSpace(userid)) return ""; try { string AccessUrl = string.Format("https://oapi.dingtalk.com/user/get?access_token={0}&userid={1}", AccessToken, userid); //请求获取token GET方式 return HttpHelper.HttpGet(AccessUrl, null); } catch (Exception ex) { return ""; } } #endregion #region 获取TOKEN public void GetToken() { if (string.IsNullOrWhiteSpace(AccessToken)) { string AccessUrl = string.Format("https://oapi.dingtalk.com/gettoken?appkey={0}&appsecret={1}", appkey, appsecret); //请求获取token GET方式 Newtonsoft.Json.Linq.JToken json = Newtonsoft.Json.Linq.JToken.Parse(HttpHelper.HttpGet(AccessUrl, null)); AccessToken = json["access_token"].ToString(); } } #endregion #region 消息推送 /// <summary> /// 文本消息推送(Text格式) /// </summary> /// <param name="text">推送内容</param> /// <param name="userid_list">用户id,多个用户用,隔开(如:123,456)</param> public string SendTextMessageToUser(string text,string userid_list) { GetToken(); if (string.IsNullOrWhiteSpace(AccessToken) || string.IsNullOrWhiteSpace(text)|| string.IsNullOrWhiteSpace(userid_list)) return ""; string MessageUrl = String.Format("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token={0}", AccessToken); var json_req = SendCommonText(text, userid_list); //var json_req = SendCommonTextAndTitle("销售订单管理系统", content.ToString(), txtusesid.Text); //var json_req = SendCardMsg("销售订单管理系统", content.ToString(), "查看详情", "https://ding-doc.dingtalk.com/", txtusesid.Text); string jsonRequest = JsonConvert.SerializeObject(json_req);//将对象转换为json //POST请求 消息推送 var sr = HttpHelper.HttpPost(MessageUrl, jsonRequest); return sr; } /// <summary> /// 文本消息推送(MarkDown格式) /// </summary> /// <param name="title">提醒用户的标题</param> /// <param name="text">提醒内容(支持markdown文本解析)</param> /// <param name="userid_list">用户id,多个用户用,隔开(如:123,456)</param> /// <returns></returns> public string SendMarkDownMessageToUser(string title,string text, string userid_list) { GetToken(); if (string.IsNullOrWhiteSpace(AccessToken) || string.IsNullOrWhiteSpace(text) || string.IsNullOrWhiteSpace(userid_list)) return ""; string MessageUrl = String.Format("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token={0}", AccessToken); //var json_req = SendCommonText(text, userid_list); var json_req = SendCommonTextAndTitle(title, text, userid_list); //var json_req = SendCardMsg("销售订单管理系统", content.ToString(), "查看详情", "https://ding-doc.dingtalk.com/", txtusesid.Text); string jsonRequest = JsonConvert.SerializeObject(json_req);//将对象转换为json //POST请求 消息推送 var sr = HttpHelper.HttpPost(MessageUrl, jsonRequest); return sr; } /// <summary> /// 文本消息推送(MarkDown格式) /// </summary> /// <param name="title">提醒用户的标题</param> /// <param name="text">提醒内容(支持markdown文本解析)</param> /// <param name="linkText">链接文本</param> /// <param name="linkUrl">链接地址</param> /// <param name="userid_list">用户id,多个用户用,隔开(如:123,456)</param> /// <returns></returns> public string SendActionCardMessageToUser(string title, string text,string linkText,string linkUrl ,string userid_list) { GetToken(); if (string.IsNullOrWhiteSpace(AccessToken) || string.IsNullOrWhiteSpace(text) || string.IsNullOrWhiteSpace(userid_list)) return ""; string MessageUrl = String.Format("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token={0}", AccessToken); var json_req = SendCardMsg(title, text, linkText, linkUrl, userid_list); string jsonRequest = JsonConvert.SerializeObject(json_req);//将对象转换为json //POST请求 消息推送 var sr = HttpHelper.HttpPost(MessageUrl, jsonRequest); return sr; } #endregion #region 推送消息类型 /// <summary> /// 推送普通文本内容 /// </summary> /// <param name="content"></param> /// <param name="usesid"></param> /// <returns></returns> public object SendCommonText(string content, string usesid) { return new { userid_list = usesid, //接受推送userid,不同用户用|分割 //dept_id_list = "127577105", //接受推送部门id agent_id = agentid,//应用Id msgtype = "text", //推送类型 msg = new { msgtype = "text", text = new { content = content.ToString() }//内容text } }; } /// <summary> /// 推送markdown内容 /// </summary> /// <param name="_title"></param> /// <param name="_content"></param> /// <param name="usesid"></param> /// <returns></returns> public object SendCommonTextAndTitle(string _title, string _content, string usesid) { return new { userid_list = usesid, //接受推送userid,不同用户用|分割 dept_id_list = "", //接受推送部门id agent_id = agentid,//应用Id msg = new { msgtype = "markdown",//推送类型 markdown = new { title = _title, text = _content//内容text } } }; } /// <summary> /// 推送action_card格式内容 /// </summary> /// <param name="_title">标题</param> /// <param name="_content">内容</param> /// <param name="_single_title">链接标题</param> /// <param name="_single_url">链接地址</param> /// <param name="usesid"></param> /// <returns></returns> public object SendCardMsg(string _title, string _content, string _single_title, string _single_url, string usesid) { return new { userid_list = usesid, //接受推送userid,不同用户用|分割 //dept_id_list = "", //接受推送部门id agent_id = agentid,//应用Id msg = new { msgtype = "action_card", action_card = new { title = _title,//提示信息 markdown = _content, single_title = _single_title, single_url = _single_url } } }; } #endregion } }
分类:
MarkDown
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)