最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#微信公眾號開發(fā)之使用MessageHandler簡化消息處理流程

 更新時間:2022年06月15日 11:59:07   作者:Jeffrey?Su  
這篇文章介紹了C#微信公眾號開發(fā)之使用MessageHandler簡化消息處理流程,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

微信公眾平臺對信息做了比較清晰的分類,最基本的包括請求(Request)和響應(yīng)(Response)兩大類信息,這兩類信息有分為文字、語音、圖片等格式。

這些類型在Senparc.Weixin.MP.dll SDK中以枚舉的方式區(qū)分,同時根據(jù)嚴格命名規(guī)則命名了所有類型的RequestMessage和ResponseMessage。

但是基于枚舉和類名的區(qū)分,勢必會使用到switch或者反射這樣復(fù)雜的代碼,用于處理不同類型的微信信息。

為此,從v0.3.0起,Senparc.Weixin.MP開發(fā)了MessageHandler,對消息處理進行了封裝(所以MessageHandler內(nèi)部仍然使用了復(fù)雜但是高效的switch等判斷手法),可以在使用SDK的時候輕松、簡潔地處理各類信息,原本需要寫入if或者switch判斷數(shù)據(jù)類型,然后執(zhí)行的代碼塊,現(xiàn)在都只需要寫入到對應(yīng)的方法中。

MessageHandler是一個抽象類,開發(fā)者可以在自己的項目中創(chuàng)建自己的類,繼承并實現(xiàn)(重寫)MessageHandler中提供的方法。

第一步,我們新建一個MyMessageHandler.cs,將MessageHandler作為基類并重寫所有方法:

using System;
using System.IO;
using Senparc.Weixin.MP.MessageHandlers;
using Senparc.Weixin.MP.Entities;

namespace Senparc.Weixin.MP.Sample.CustomerMessageHandler
{
    public class MyMessageHandler : MessageHandler<MessageContext>
    {
        public MyMessageHandler(Stream inputStream)
            : base(inputStream)
        {

        }
        public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
        {
            var responseMessage = this.CreateResponseMessage<ResponseMessageText>();//ResponseMessageText也可以是News等其他類型
            responseMessage.Content = "這條消息來自DefaultResponseMessage。";
            return responseMessage;
        }

        public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
        {
            //...
        }

        public override IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage)
        {
            //...
        }

        //更多沒有重寫的OnXX方法,將默認返回DefaultResponseMessage中的結(jié)果。
        ....
    }
}

上述代碼中重寫的方法對應(yīng)了接收不同的Request類型(在MessageHandler.cs源文件中已有詳細說明,根據(jù)命名規(guī)則也很好理解)。

構(gòu)造函數(shù)的inputStream用于接收來自微信服務(wù)器的請求流(如果需要在外部處理,這里也可以傳入XDocument)。

第二步,在不同的重寫方法內(nèi),實現(xiàn)自己的方法。 比如我們對于文字(Text)信息進行這樣的處理:

        public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
        {
            //TODO:這里的邏輯可以交給Service處理具體信息,參考OnLocationRequest方法或/Service/LocationSercice.cs
            var responseMessage = CreateResponseMessage<ResponseMessageText>();
            responseMessage.Content =
                string.Format(
                    "您剛才發(fā)送了文字信息:{0}\r\n您還可以發(fā)送【位置】【圖片】【語音】等類型的信息,查看不同格式的回復(fù)。\r\nSDK官方地址:http://weixin.senparc.com",
                    requestMessage.Content);
            return responseMessage;
        }

ResponseMessageBase.CreateFromRequestMessage方法在主頁的readme.md中已經(jīng)有說明,用于指定初始化特定類型的ResponseMessage。最終返回的responseMessage可以是基于IResponseMessageBase的任何類型。

第三步,在Action中使用MessageHandler(如果在Webforms里通常寫在Page_Load事件中):

        [HttpPost]
        [ActionName("Post")]
        public ActionResult Post(string signature, string timestamp, string nonce, string echostr)
        {
            if (!CheckSignature.Check(signature, timestamp, nonce, Token))
            {
                return Content("參數(shù)錯誤!");
            }

            var messageHandler = new CustomerMessageHandler(Request.InputStream);
            messageHandler.Execute();//執(zhí)行微信處理過程
            return Content(messageHandler.ResponseDocument.ToString());
        }

messageHandler.Execute();用于執(zhí)行整個信息處理過程,其中會調(diào)用重寫的OnxxRequest方法。

用戶上下文

可能您已經(jīng)注意到,從v0.4.0開始,MessageHandler提供了一個泛型:

public class MyMessageHandler : MessageHandler<MessageContext>

這里的MessageContext是SDK默認提供的一個基于IMessageContext接口的類(已經(jīng)基本夠用),您也可以根據(jù)自己的需要實現(xiàn)自己的類。 關(guān)于上下文的說明見這里:用戶上下文WeixinContext和MessageContext。

到此這篇關(guān)于C#使用MessageHandler簡化消息處理流程的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于C#編寫一個操作XML的簡單類庫XMLHelper

    基于C#編寫一個操作XML的簡單類庫XMLHelper

    這篇文章主要為大家詳細介紹了如何基于C#編寫一個操作XML的簡單類庫——XMLHelper,文中的示例代碼講解詳細,需要的小伙伴可以參考一下
    2023-06-06
  • c#異常處理示例分享

    c#異常處理示例分享

    這篇文章主要介紹了c#異常處理示例,需要的朋友可以參考下
    2014-04-04
  • c#窗體傳值用法實例詳解

    c#窗體傳值用法實例詳解

    這篇文章主要介紹了c#窗體傳值用法,以實例形式較為詳細的分析了C#窗體傳值的各種常用技巧,需要的朋友可以參考下
    2015-06-06
  • 支持多類型數(shù)據(jù)庫的c#數(shù)據(jù)庫模型示例

    支持多類型數(shù)據(jù)庫的c#數(shù)據(jù)庫模型示例

    本文為大家提供一個c#數(shù)據(jù)庫訪問模型,支持多類型數(shù)據(jù)庫,簡單抽取數(shù)據(jù)庫訪問函數(shù),大家參考使用吧
    2014-01-01
  • 詳解C# 代碼占用的空間

    詳解C# 代碼占用的空間

    這篇文章主要介紹了C# 代碼占用的空間的相關(guān)知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-02-02
  • c#之OpenFileDialog解讀(打開文件對話框)

    c#之OpenFileDialog解讀(打開文件對話框)

    這篇文章主要介紹了c#之OpenFileDialog(打開文件對話框),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • WPF彈出自定義窗口的方法

    WPF彈出自定義窗口的方法

    這篇文章主要介紹了WPF彈出自定義窗口的方法,結(jié)合實例形式分析了WPF自定義窗口的創(chuàng)建與調(diào)用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • C#中參數(shù)的傳遞方式詳解

    C#中參數(shù)的傳遞方式詳解

    本文詳細講解了C#中參數(shù)的傳遞方式,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C# 讀寫XML文件實例代碼

    C# 讀寫XML文件實例代碼

    在本篇文章里小編給大家整理的是關(guān)于C# 讀寫XML文件最簡單方法,需要的朋友們可以跟著學(xué)習(xí)參考下。
    2020-03-03
  • Unity3D利用DoTween實現(xiàn)卡牌翻轉(zhuǎn)效果

    Unity3D利用DoTween實現(xiàn)卡牌翻轉(zhuǎn)效果

    這篇文章主要為大家詳細介紹了Unity3D利用DoTween實現(xiàn)卡牌翻轉(zhuǎn)效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02

最新評論

慈利县| 两当县| 通州区| 双鸭山市| 荥阳市| 天祝| 永寿县| 霍邱县| 灵璧县| 广东省| 漳浦县| 修水县| 龙泉市| 甘肃省| 交城县| 永安市| 崇州市| 龙山县| 扶绥县| 石河子市| 洛川县| 伊吾县| 肃南| 武城县| 望谟县| 和顺县| 兰西县| 象山县| 廉江市| 曲阳县| 监利县| 大方县| 台东县| 邹城市| 鲁甸县| 罗城| 武乡县| 亳州市| 肇东市| 莱芜市| 新泰市|