JeffreySu/WeiXinMPSDK · error · WeixinException

执行WeixinResult时提供的MessageHandler不能为Null!

Error message

执行WeixinResult时提供的MessageHandler不能为Null!

What it means

WeixinResult.ExecuteResult (sync MVC) writes base.Content to the response, or delegates to an IMessageHandler's FinalResponseDocument when Content is null. If both Content and _messageHandlerDocument are null it throws WeixinException, since the result would produce an empty WeChat reply. It flags an incorrectly configured WeixinResult.

Solutions

  1. Return WeixinResult with a string: return new WeixinResult("success"); for empty acknowledgements.
  2. Provide an executed IMessageHandler: new WeixinResult(messageHandler) after handler.Execute().
  3. Audit all controller return paths so every branch sets Content or a MessageHandler.
  4. Catch/log WeixinException at the filter level to pinpoint which WeChat endpoint is misconfigured.

Example fix

// before
if (requestMsg is TextRequestMessage)
    return new WeixinResult(); // null path
// after
if (requestMsg is TextRequestMessage)
    return new WeixinResult("处理成功");
Defensive patterns

Strategy: try-catch

Validate before calling

if (string.IsNullOrEmpty(result.Content) && result.MessageHandlerDocument == null)
    return new WeixinResult("success"); // safe default acknowledgement

Type guard

static bool HasReply(WeixinResult r) =>
    !string.IsNullOrEmpty(r.Content) || r.MessageHandlerDocument != null;

Try / catch

try { return weixinResult; }
catch (WeixinException ex) { logger.LogError(ex, "WeixinResult built without content/handler"); return new WeixinResult("success"); }

Prevention

When it happens

Trigger: Returning new WeixinResult() or new WeixinResult((string)null) from a controller without setting MessageHandler, so ExecuteResult has neither content nor a handler.

Common situations: Customer-service/message controllers where the reply is built conditionally but a code path leaves both fields null; sample code copied without the handler setup; returning WeixinResult for an unhandled message type.

Related errors


AI-assisted analysis of JeffreySu/WeiXinMPSDK@be573f6f94 (2026-09-12). Data as JSON: /api/errors/6c1c621ca847da52. Report an issue: GitHub.

Appendix: source

Thrown at src/Senparc.Weixin.AspNet/Results/WeixinResult.cs:116

                {
                    return null;
                }
            }
            set { base.Content = value; }
        }

#if NET462
        public override void ExecuteResult(ControllerContext context)
#else
        public override void ExecuteResult(ActionContext context)
#endif
        {
            if (base.Content == null)
            {
                //使用IMessageHandler输出
                if (_messageHandlerDocument == null)
                {
                    throw new Senparc.Weixin.Exceptions.WeixinException("执行WeixinResult时提供的MessageHandler不能为Null!", null);
                }

                if (_messageHandlerDocument.FinalResponseDocument == null)
                {
                    //throw new Senparc.Weixin.MP.WeixinException("ResponseMessage不能为Null!", null);
                }
                else
                {
#if NET462
                    context.HttpContext.Response.ClearContent();
                    context.HttpContext.Response.ContentType = "text/xml";
                    _messageHandlerDocument.FinalResponseDocument.Save(context.HttpContext.Response.OutputStream);
#else
                    //context.HttpContext.Response.ClearContent();
                    context.HttpContext.Response.ContentType = "text/xml";
                    _messageHandlerDocument.FinalResponseDocument.Save(context.HttpContext.Response.Body);

#endif

View on GitHub (pinned to be573f6f94)