正在开发的一个以最简化的操作在 .NET Core 1.0 中处理微信请求的SDK

现有的微信SDK库在 .NET Core 1.0 中表示很有压力,比如 Deepleo.Weixin.SDK 和 Senparc.Weixin(即使现有一个转移到.NET Core 1.0的初始项目,但是暂时还不能用) 。前者轻量后者全而轻便,但是按照我的个人观点看来,前者太轻便了,对于不记参数的我来说点不出来就等于白搭,后者需要自定义一个处理方法来执行相关任务,但是相关的类型对于我这个就爱点出来能解决的事绝不干多余的是的我来说,还是不大乐意去用。因此就结合两者自行开发一个适合自己使用的SDK库,在项目结束后开源。

附上现有的中间件Middleware的Demo

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Threading.Tasks;
 5 using Microsoft.AspNetCore.Builder;
 6 using Microsoft.AspNetCore.Http;
 7 using WeChat;
 8 using WeChat.Entities;
 9
10 namespace WebApplication.Middleware
11 {
12     // You may need to install the Microsoft.AspNetCore.Http.Abstractions package into your project
13     public class WeChatMiddleware
14     {
15         private readonly RequestDelegate _next;
16
17         public WeChatMiddleware(RequestDelegate next)
18         {
19             _next = next;
20         }
21
22         public async Task Invoke(HttpContext httpContext)
23         {
24             if (httpContext.Request.Path.Value.ToLower().EndsWith("/wxapi"))
25             {
26                 #region Get
27                 if (httpContext.Request.Method == "GET")
28                 {
29                     string echoString = httpContext.Request.Query["echoStr"];
30                     // 没有必要参数 直接忽略
31                     if (string.IsNullOrWhiteSpace(echoString))
32                         await httpContext.Response.WriteAsync("( ̄▽ ̄) 你想干嘛");
33
34                     if (httpContext.CheckSignature(Option.WeChatConfig))
35                         await httpContext.Response.WriteAsync(echoString);
36                 }
37                 #endregion
38                 #region POST
39                 else if (httpContext.Request.Method == "POST")
40                 {
41                     string rsp = string.Empty;
42                     var message = httpContext.GetMessage(Option.WeChatConfig);
43                     if (message == null) return;//消息体验证失败或转换失败 终止处理
44                     switch (message.Type)
45                     {
46                         case MessageType.Text:
47                             switch (message.GetText())
48                             {
49                                 case "单图文":
50                                     rsp = message.ReplyNews(new News() { description = "测试", title = "测试图文" });
51                                     break;
52                                 case "多图文":
53                                     rsp = message.ReplyNews(
54                                         new News() { description = "呵呵", title = "凸(艹皿艹 )", picurl = "url" },
55                                         new News() { title = "阿勒", picurl = "url" }
56                                         );
57                                     break;
58                                 default:
59                                     rsp = message.ReplyText("你发了:" + message.GetText());
60                                     break;
61                             }
62                             break;
63                         case MessageType.Event:
64                             var evt = message.AsEvent();
65                             switch (evt.Event)
66                             {
67                                 case Event.unsubscribe: return;
68                                 case Event.subscribe:
69                                     rsp = message.ReplyText("关注成功");
70                                     break;
71                             }
72                             break;
73                         default:
74                             rsp = message.ReplyText("阿勒,你发了神马?");
75                             break;
76                     }
77                     await httpContext.FinalResponse(Option.WeChatConfig, rsp); return; //处理到此结束 直接返回消息
78                 }
79                 #endregion
80                 // 默认不返回任何数据,以避免微信重复提交请求
81                 return;
82             }
83             await _next(httpContext);
84
85         }
86     }
87
88     // Extension method used to add the middleware to the HTTP request pipeline.
89     public static class WeChatMiddlewareExtensions
90     {
91         public static IApplicationBuilder UseWeChatMiddleware(this IApplicationBuilder builder)
92         {
93             return builder.UseMiddleware<WeChatMiddleware>();
94         }
95     }
96 }
时间: 2024-10-10 10:18:33

正在开发的一个以最简化的操作在 .NET Core 1.0 中处理微信请求的SDK的相关文章

.Net Core 3.0后台使用httpclient请求网络网页和图片_使用Core3.0做一个简单的代理服务器

原文:.Net Core 3.0后台使用httpclient请求网络网页和图片_使用Core3.0做一个简单的代理服务器 目标:使用.net core最新的3.0版本,借助httpclient和本机的host域名代理,实现网络请求转发和内容获取,最终显示到目标客户端! 背景:本人在core领域是个新手,对core的使用不多,因此在实现的过程中遇到了很多坑,在这边博客中,逐一介绍下.下面进入正文 正文: 1-启用httpClient注入: 参考文档:https://docs.microsoft.c

一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之 Http 请求客户端

一个技术汪的开源梦 —— 目录 想必大家在项目开发的时候应该都在程序中调用过自己内部的接口或者使用过第三方提供的接口,咱今天不讨论 REST ,最常用的请求应该就是 GET 和 POST 了,那下面开始讲解对于 Http 请求客户端的简单封装. 首先,说一个好消息 就是 .Net Core 已将之前的 System.Net.Http 组件默认添加到了 NETStandard.Library 库中,所以直接用就好了,不需要再额外在 Nuget 上安装了,说道 Nuget 后续计划会有一篇文章介绍

web开发——写一个简单的表格导出操作

一.前台页面: 主要是一个按钮和一个表格,表格有显示数据,按钮负责将表格中的数据选择性地导出.除此外,可以附加一个小窗口和进度条,用于显示下载进度. 1. 按钮:<a href="javascript:;" class="easyui-linkbutton" iconCls="icon-redo" data-options="plain:true" id="btn-exp" onclick="

一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之序列化

一个技术汪的开源梦 —— 目录 想必大家在项目中都接触过 JSON 或者 XML 吧,为了将对象在网络上传输或者将其持久化必须将其序列化为一个字符串然后进行后续操作.常见的就是将其序列化成 JSON 或者 XML . 大家在项目中应该都看到过这样的工具类 例如 ***XmlHelper.***JsonHelper 等,没错这一些助手类会帮助我们重复造轮子.既然是组件并且还是是开源的必须考虑每个功能的后续可扩展性以及易用性. ISerializer 序列化者接口 1 using System; 2

[翻译] 使用 .NET Core 3.0 创建一个 Windows 服务

原文: .NET Core Workers as Windows Services 在 .NET Core 3.0 中,我们引入了一种名为 Worker Service 的新型应用程序模板.此模板旨在为您在 .NET Core 中编写长时间运行的服务的提供一个起点.在本演练中,我们将创建一个 worker 并将其作为 Windows 服务运行. 创建一个 Worker 注意:在我们的预览版中,worker 模板与 Web 模板位于同一级菜单中.这将在未来的版本中发生变化.我们打算将 Worker

在开发第一个Android应用之前需要知道的5件事:

你能否详细讲述一下,在开发Android应用过程中每一阶段要用到的技能和编程语言? 建立一个Android应用程序可以归结为两个主要技能/语言:Java和Android系统.Java是Android的通用编程语言,但是Android还包括学习用于app界面设计的XML语言,学习Android概念,以及从Java编程角度运用这些概念. 学了Java和XML之后,再用Android理念将两者连接起来. 我也有分享过一些学习Activities和 Fragments等的Android相关知识.我最喜欢

[Ruby on Rails系列]3、初试Rails:使用Rails开发第一个Web程序

本系列前两部分已经介绍了如何配置Ruby on Rails开发环境,现在终于进入正题啦! Part1.开发前的准备 本次的主要任务是开发第一个Rails程序.需要特别指出的是,本次我选用了一个(PaaS开发平台),也就是Rails教程中介绍的Cloud 9平台,该平台已经自动为我们作好了环境配置的工作:只要你有一个浏览器就可以使用该云端开发环境.非常的方便快捷!简直赞!平台网址如下:https://c9.io/ Cloud 9开发平台的实质是为每一个注册的开发者在服务器端分配一个Linux虚拟机

Netty入门二:开发第一个Netty应用程序

    既然是入门,那我们就在这里写一个简单的Demo,客户端发送一个字符串到服务器端,服务器端接收字符串后再发送回客户端. 2.1.配置开发环境 1.安装JDK 2.去官网下载jar包 (或者通过pom构建) 2.2.认识下Netty的Client和Server 一个Netty应用模型,如下图所示,但需要明白一点的是,我们写的Server会自动处理多客户端请求,理论上讲,处理并发的能力决定于我们的系统配置及JDK的极限. Client连接到Server端 建立链接发送/接收数据 Server端

我开发了一个产品--Markdown Notes

大家好,我开发了一个工具类软件产品--Markdown Notes,中文名是Markdown笔记.想写一篇有关它的文章,目的就是为了推广.推广.推广:) BTW:本文就是用这个工具所写的. 有的人说一个产品发布上线没有进行营销推广的话,就是等于石沉太平洋--无人问津. 这点对于开发者来说尤为重要,作为技术人员更多地会偏向于追求产品功能的完整性而忽略了营销推广的重要性.营销很重要的方式就是网络推广,而SEO(搜索引擎优化)就是网络推广的主要手段. 对于SEO要做的就是产品关键词和超链接尽可能多地出