Skip to content

Senparc.Weixin.MP.MvcExtension.dll使用说明

Jeffrey Su edited this page Nov 18, 2013 · 6 revisions

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升级的时候可以享受诸多好处,比如统一的性能优化等等。