/// <summary> /// 解析消息基类 /// </summary> /// <param name="jo">消息对象</param> /// <returns>返回消息基类</returns> private static RequestBaseMessage ParseBaseMessage(JObject jo) { string toUserName, fromUserName, strMsgType; DateTime createTime; RequestMessageTypeEnum msgType; toUserName = (string)jo["ToUserName"][CDATA_KEY]; fromUserName = (string)jo["FromUserName"][CDATA_KEY]; createTime = Utility.ToDateTime((int)jo["CreateTime"]); strMsgType = (string)jo["MsgType"][CDATA_KEY]; if (string.IsNullOrWhiteSpace(toUserName)) { throw new ArgumentNullException("ToUserName", "ToUserName为空。"); } if (string.IsNullOrWhiteSpace(fromUserName)) { throw new ArgumentNullException("FromUserName", "FromUserName为空。"); } if (string.IsNullOrWhiteSpace(strMsgType)) { throw new ArgumentNullException("MsgType", "MsgType为空。"); } msgType = (RequestMessageTypeEnum)Enum.Parse(typeof(RequestMessageTypeEnum), strMsgType, true); return(new RequestBaseMessage(toUserName, fromUserName, createTime, msgType)); }
/// <summary> /// 构造函数 /// </summary> /// <param name="request">HTTP请求</param> public RequestMessageHelper(HttpRequest request) { if (request != null) { this.request = request; //获取请求体内容 string content = Utility.GetRequestContent(request); //获取消息加密类型 encryptType = GetEncryptType(); //如果已加密,解密消息 string rawContent; if (encryptType == MessageEncryptTypeEnum.aes) { rawContent = DecryptMessage(content); } else { rawContent = content; } //解析消息 if (!TryParse(rawContent, out message)) { PublicAccount.Message.Insert(new Message(PublicAccount.MessageType.Exception, string.Format("解析消息失败。\r\n地址:{0}\r\n未解密的消息:{1}\r\n解密之后的消息:{2}", request.RawUrl, content, rawContent))); } else { PublicAccount.Message.Insert(new Message(PublicAccount.MessageType.Exception, string.Format("解析消息成功。\r\n地址:{0}\r\n未解密的消息:{1}\r\n解密之后的消息:{2}", request.RawUrl, content, message))); } } else { this.request = null; message = null; } }