JeffreySu/WeiXinMPSDK · error · MessageHandlerException

微信公众号不支持 IRequestMessageShortVideo 请求类型

Error message

微信公众号不支持 IRequestMessageShortVideo 请求类型

What it means

WxOpenMessageEntityEnlightener.NewRequestMessageShortVideo unconditionally throws MessageHandlerException. The WxOpen (WeChat Mini Program) message pipeline does not support short-video request messages, which only exist in the MP (公众号) protocol, so the entity factory refuses to construct them.

Solutions

  1. Do not request IRequestMessageShortVideo in WxOpen context; handle ShortVideo messages only in an MP (公众号) MessageHandler.
  2. If you control the call site, branch on request message type before asking the enlightener for an entity.
  3. If you genuinely need short-video handling, use Senparc.Weixin.MP's MessageHandler for that message instead of WxOpen.

Example fix

// before
var msg = enlightener.NewRequestMessageShortVideo();
// after
IRequestMessage msg = requestMessage is RequestMessageShortVideo
    ? /* handle in MP handler */ HandleShortVideoInMpHandler(requestMessage)
    : enlightener.NewRequestMessageText();
Defensive patterns

Strategy: type-guard

Validate before calling

var isMpOnly = requestMessage is IRequestMessageShortVideo;
if (isMpOnly) return; // handle in MP handler, not WxOpen

Type guard

static bool IsMpOnlyRequest(IRequestMessage m) =>
    m is IRequestMessageShortVideo or IRequestMessageVideo or IRequestMessageVoice;

Try / catch

try
{
    var msg = enlightener.NewRequestMessageShortVideo();
}
catch (MessageHandlerException ex)
{
    log.Warn("ShortVideo not supported in WxOpen", ex);
    fallback = enlightener.NewRequestMessageText();
}

Prevention

When it happens

Trigger: Any code path that calls WxOpenMessageEntityEnlightener.NewRequestMessageShortVideo(), typically the WxOpen message handler trying to materialize a RequestMessageShortVideo entity for an incoming XML message or when third-party code requests an entity via the enlightener/factory.

Common situations: Reusing MP-style message-handling code against a WxOpen handler; tests that enumerate all IRequestMessage types; switching a handler base class from MessageHandler (MP) to WxOpenMessageHandler while still expecting MP entity types.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


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

Appendix: source

Thrown at src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/MessageHandlers/WxOpenMessageEntityEnlightener.cs:44

        public override IRequestMessageImage NewRequestMessageImage()
        {
            return new RequestMessageImage();
        }

        public override IRequestMessageLink NewRequestMessageLink()
        {
            throw new MessageHandlerException("微信公众号不支持 IRequestMessageLink 请求类型");
        }

        public override IRequestMessageLocation NewRequestMessageLocation()
        {
            throw new MessageHandlerException("微信公众号不支持 IRequestMessageLocation 请求类型");
        }

        public override IRequestMessageShortVideo NewRequestMessageShortVideo()
        {
            throw new MessageHandlerException("微信公众号不支持 IRequestMessageShortVideo 请求类型");
        }

        public override IRequestMessageText NewRequestMessageText()
        {
            return new RequestMessageText();
        }

        public override IRequestMessageVideo NewRequestMessageVideo()
        {
            throw new MessageHandlerException("微信公众号不支持 IRequestMessageVideo 请求类型");
        }

        public override IRequestMessageVoice NewRequestMessageVoice()
        {
            throw new MessageHandlerException("微信公众号不支持 IRequestMessageVoice 请求类型");
        }

        public override IResponseMessageImage NewResponseMessageImage()

View on GitHub (pinned to be573f6f94)