JeffreySu/WeiXinMPSDK · error · UnknownRequestMsgTypeException

MsgType: 在ResponseMessageFactory中没有对应的处理程序!

Error message

MsgType:{0} 在ResponseMessageFactory中没有对应的处理程序!

What it means

ResponseMessageFactory.GetResponseEntity maps a desired ResponseMsgType to a concrete ResponseMessage class. If the enum value falls through the switch (default case), it throws UnknownRequestMsgTypeException saying no handler exists in ResponseMessageFactory for that MsgType.

Solutions

  1. Upgrade to the latest Senparc.Weixin.MP version where the switch covers all enum values.
  2. Verify the incoming XML MsgType is a type you intend to respond to.
  3. Respond with a supported type (e.g. ResponseMessageText) instead of echoing unsupported types.
  4. Catch UnknownRequestMsgTypeException and return a default text response.

Example fix

// before
var resp = ResponseMessageFactory.GetResponseEntity(requestDoc);
// after
try { var resp = ResponseMessageFactory.GetResponseEntity(requestDoc); }
catch (UnknownRequestMsgTypeException) { /* return default text response */ }
Defensive patterns

Strategy: try-catch

Validate before calling

var rawType = doc?.SelectSingleNode("//MsgType")?.InnerText;
if (string.IsNullOrEmpty(rawType)) return null;

Try / catch

try { resp = ResponseMessageFactory.GetResponseEntity(doc); }
catch (UnknownRequestMsgTypeException) { resp = BuildDefaultTextResponse(); }

Prevention

When it happens

Trigger: Calling GetResponseEntity(doc) where the source XML's MsgType maps to a ResponseMsgType enum value not covered by the switch (e.g. a custom or newer message type added to the enum without a matching case).

Common situations: SDK enum extended by an updated package while the factory code in your installed version is older; passing a request XML where MsgType was modified; using a msg type that only exists in newer WeChat API versions.

Related errors


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

Appendix: source

Thrown at src/Senparc.Weixin.MP/Senparc.Weixin.MP/ResponseMessageFactory.cs:101

                        responseMessage = new ResponseMessageImage();
                        break;
                    case ResponseMsgType.Voice:
                        responseMessage = new ResponseMessageVoice();
                        break;
                    case ResponseMsgType.Video:
                        responseMessage = new ResponseMessageVideo();
                        break;
                    case ResponseMsgType.Music:
                        responseMessage = new ResponseMessageMusic();
                        break;
                    case ResponseMsgType.News:
                        responseMessage = new ResponseMessageNews();
                        break;
                    case ResponseMsgType.Transfer_Customer_Service:
                        responseMessage = new ResponseMessageTransfer_Customer_Service();
                        break;
                    default:
                        throw new UnknownRequestMsgTypeException(string.Format("MsgType:{0} 在ResponseMessageFactory中没有对应的处理程序!", msgType), new ArgumentOutOfRangeException());
                }
                Senparc.NeuChar.Helpers.EntityHelper.FillEntityWithXml(responseMessage, doc);
            }
            catch (ArgumentException ex)
            {
                throw new WeixinException(string.Format("ResponseMessage转换出错!可能是MsgType不存在!,XML:{0}", doc.ToString()), ex);
            }
            return responseMessage;
        }


        /// <summary>
        /// 获取XDocument转换后的IRequestMessageBase实例。
        /// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常
        /// </summary>
        /// <returns></returns>
        public static IResponseMessageBase GetResponseEntity(string xml)
        {

View on GitHub (pinned to be573f6f94)