/// <summary>
 /// Initializes a <see cref="WeixinMessageEventReceivedContext"/>
 /// </summary>
 /// <param name="context">The HTTP environment</param>
 /// <param name="options">The options for Weixin</param>
 /// <param name="sender">The sender respective for <see cref="MessageHandler{TC}}"/></param>
 /// <param name="args"><see cref="TEventArgs"/></param>
 public WeixinReceivedContext(
     WeixinMessageHandler sender,
     TEventArgs args,
     bool needEncrypt)
 {
     Sender      = sender;
     Args        = args;
     NeedEncrypt = needEncrypt;
 }
        /// <summary>
        /// 微信公众号消息接收地址
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task InvokePost(HttpContext context)
        {
            HttpRequest request   = context.Request;
            var         signature = request.Query["signature"];
            var         timestamp = request.Query["timestamp"];
            var         nonce     = request.Query["nonce"];

            var websiteToken = _options.WebsiteToken;

            //context.Response.Clear();
            context.Response.ContentType = "text/plain;charset=utf-8";
            if (!SignatureHelper.ValidateSignature(signature, timestamp, nonce, websiteToken) && !_options.Debug)
            {
                var result = "这是一个微信程序,请用微信客户端访问!";
                await context.Response.WriteAsync(result);

                return;
            }

            var messageHandler = new WeixinMessageHandler();

            try
            {
                var result = await messageHandler.InitializeAsync(_options, context, _logger, _encryptor);

                //var result = await messageHandler.HandleAsync();
                //if (!result)
                //{
                //    await _next(context);
                //}
            }
            catch (Exception ex)
            {
                _logger.LogError(0, ex, "处理POST报文时发生异常");
            }
            finally
            {
                try { await messageHandler.TeardownAsync(); }
                catch (Exception)
                {
                    // Don't mask the original exception, if any
                }
            }
        }