-
Notifications
You must be signed in to change notification settings - Fork 4.4k
Senparc.Weixin.MP.MvcExtension.dll使用说明
Senparc.Weixin.MP.MvcExtension.dll是专门为MVC(4.0)项目而添加的扩展功能库。
目前Senparc.Weixin.MP.MvcExtension.dll主要提供了下列功能:
WeixinInternalRequest:强制过滤来自非微信客户端的网页请求(无法在外部浏览器中打开使用此属性的Action)。
WeixinResult:封装后的微信数据返回类型(配合MessageHandler使用)。简化MVC中HandlerMessage的输出,让编程人员忽略ResponseMessage及ResponseDocument这些“中间产物”的操作(当然只要你愿意,还是可以用以前的方法进行操作,这只是个扩展)。
下面简单介绍一下这两个方法的使用。
#验证和过滤微信客户端请求:WeixinInternalRequest
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Senparc.Weixin.MP.Sample.Controllers
{
using Senparc.Weixin.MP.MvcExtension;
/// <summary>
/// 演示Senparc.Weixin.MP.MvcExtension.WeixinInternalRequestAttribute
/// </summary>
public class FilterTestController : Controller
{
[WeixinInternalRequest("访问被拒绝,请通过微信客户端访问!" , "nofilter")]
public ActionResult Index()
{
return Content("访问正常。当前地址:" + Request.Url.PathAndQuery + "<br />请点击右上角转发按钮,使用【在浏览器中打开】功能进行测试!<br />或者也可以直接在外部浏览器打开http://weixin.senparc.com/FilterTest/进行测试。");
}
}
}
只需要引用using Senparc.Weixin.MP.MvcExtension;
,给Action加上[WeixinInternalRequest("message")]属性即可实现这个过滤,其中message为访问被拒绝时显示在网页上的文字。
第二个参数为可选参数,nofilter表示如果访问的url中,有nofilter这个参数,且不为空,则忽略对浏览器的判断。例如:?id=1&nofilter=1。此功能可以在本地测试的时候提供很大的便利,当然实际发布的时候建议将这个参数留空,或设置一个更复杂的参数。
#简化MessageHandler输出:WeixinResult
/// <summary>
/// 最简化的处理流程
/// </summary>
[HttpPost]
[ActionName("MiniPost")]
public ActionResult MiniPost(string signature, string timestamp, string nonce, string echostr)
{
if (!CheckSignature.Check(signature, timestamp, nonce, Token))
{
//return Content("参数错误!");//v0.7-
return new WeixinResult("参数错误!");//v0.8+
}
var messageHandler = new CustomMessageHandler(Request.InputStream);
messageHandler.Execute();//执行微信处理过程
//return Content(messageHandler.ResponseDocument.ToString());//v0.7-
return new WeixinResult(messageHandler);//v0.8+
}
在Senparc.Weixin.MP v0.7之前(未添加MvcExtension扩展),我们这样处理返回数据:
return Content(messageHandler.ResponseDocument.ToString());
现在可以直接返回WeixinResult类型:
return new WeixinResult(messageHandler);
这样做的好处是可以在开发过程中忽略ResponseDocument、ResponseMessage及Linq to XML的相关方法,专注于业务逻辑实现。同时WeixinResult对messageHandler输出结果的封装也将输出逻辑独立出来,将来dll升级的时候可以享受诸多好处,比如统一的性能优化等等。