又封周末,闲暇无聊,随手写了一个关于微信公众号服务的中间件,基于.NetCore2.1。服务类库采用.Net Standard2.0,兼容.net 4.6.1。
整体思路是,设计一个中间件,提供微信消息推送服务。目前实现了,接收微信消息推送后,根据消息类型,对事件消息和被动接收消息分别进行了处理。
在中间件和服务之间,创建一个服务提供类,拥有提供消息的处理逻辑,开发者,可以实现服务提供接口,完成自己的逻辑。下面,让我们看看关于中间件的代码设计:
这里,我新建了一个名为WeiXinMiddleware的类,代码如下:
/// <summary> /// <![CDATA[微信中间件]]> /// </summary> public class WeiXinMiddleware { /// <summary> /// /// </summary> private RequestDelegate Next = null; /// <summary> /// <![CDATA[配置]]> /// </summary> public IConfiguration Configuration { get; } /// <summary> /// <![CDATA[中间件配置信息]]> /// </summary> public OAuth.WeiXinServerOptions ServerOptions { get; set; } /// <summary> /// <![CDATA[构造]]> /// </summary> /// <param name="requestDelegate"></param> /// <param name="configuration"></param> public WeiXinMiddleware(RequestDelegate requestDelegate, IConfiguration configuration, OAuth.WeiXinServerOptions serverOptions) { Next = requestDelegate; Configuration = configuration; ServerOptions = serverOptions; } /// <summary> /// <![CDATA[调用]]> /// </summary> /// <param name="context"></param> /// <returns></returns> public async Task Invoke(HttpContext context) {if (context.Request.Path == ServerOptions.NotifyPath) { //微信服务 if (ServerOptions.WeiXinServerProvider == null) ServerOptions.WeiXinServerProvider = (OAuth.IWeiXinServerProvider)context.RequestServices.GetService(typeof(OAuth.IWeiXinServerProvider)); await ServerOptions.WeiXinServerProvider.Run(context, Configuration); return; } await Next.Invoke(context); } }
代码其实很简单,就是在类内部定义一个Invoke任务,再声明一个Next属性,用于请求的下一步处理委托。在中间件的构造函数中,进行了注入,其中有一个
WeiXinServerOptions 类,它便是定义中间件所需的配置信息,也是对外提供的接口,让我们看看具体的代码:
/// <summary> /// /// </summary> public class WeiXinServerOptions { /// <summary>

