.net微信全平台快速开发的应用框架,专注业务实现,值得收藏( 二 )


上述代码中的CustomMessageHandler是一个自定义的类,继承自Senparc.Weixin.MP.MessageHandler.cs 。MessageHandler是一个抽象类,包含了执行各种不同请求类型的抽象方法(如文字,语音,位置、图片等等),我们只需要在自己创建的CustomMessageHandler中逐个实现这些方法就可以了 。刚建好的CustomMessageHandler.cs如下:
using System;using System.IO;using Senparc.Weixin.MP.MessageHandlers;using Senparc.Weixin.MP.Entities;namespace Senparc.Weixin.MP.Sample.CustomerMessageHandler{public class CustomMessageHandler : MessageHandler<MessageContext>{public public CustomMessageHandler(Stream inputStream, PostModel postModel, int maxRecordCount = 0): base(inputStream, postModel, maxRecordCount){}public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage){//ResponseMessageText也可以是News等其他类型var responseMessage = CreateResponseMessage<ResponseMessageText>();responseMessage.Content = "这条消息来自DefaultResponseMessage 。";return responseMessage;}public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage){//...}public override IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage){//...}//更多没有重写的OnXX方法,将默认返回DefaultResponseMessage中的结果 。....}}其中OnTextRequest、OnVoiceRequest等分别对应了接收文字、语音等不同的请求类型 。
比如我们需要对文字类型请求做出回应,只需要完善OnTextRequest方法:
public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage){//TODO:这里的逻辑可以交给Service处理具体信息,参考OnLocationRequest方法或/Service/LocationSercice.csvar responseMessage = CreateResponseMessage<ResponseMessageText>();responseMessage.Content = string.Format("您刚才发送了文字信息:{0}", requestMessage.Content);return responseMessage;}这样CustomMessageHandler在执行messageHandler.Execute()的时候,如果发现请求信息的类型是文本,会自动调用以上代码,并返回代码中的responseMessage作为返回信息 。responseMessage可以是IResponseMessageBase接口下的任何类型(包括文字、新闻、多媒体等格式) 。





推荐阅读