{"record":{"id":"84a37ebe10cae58d","repo":"JeffreySu/WeiXinMPSDK","slug":"defaultmessagehandlerasyncevent-base-wxopenmessagehandler","errorCode":null,"errorMessage":"DefaultMessageHandlerAsyncEvent 类型未作处理：{base.DefaultMessageHandlerAsyncEvent.ToString()}","messagePattern":"DefaultMessageHandlerAsyncEvent 类型未作处理：(.+?)","errorType":"exception","errorClass":"MessageHandlerException","httpStatus":null,"severity":"error","filePath":"src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/MessageHandlers/WxOpenMessageHandler.cs","lineNumber":297,"sourceCode":"\n        /// <summary>\n        /// 自动判断默认异步方法调用（在没有override的情况下调用的默认方法）\n        /// </summary>\n        /// <param name=\"requestMessage\">requestMessage</param>\n        /// <param name=\"syncMethod\">同名的同步方法(DefaultMessageHandlerAsyncEvent值为SelfSynicMethod时调用)</param>\n        /// <returns></returns>\n        private async Task<IResponseMessageBase> DefaultAsyncMethod(IRequestMessageBase requestMessage, Func<IResponseMessageBase> syncMethod)\n        {\n            switch (base.DefaultMessageHandlerAsyncEvent)\n            {\n                case DefaultMessageHandlerAsyncEvent.DefaultResponseMessageAsync:\n                    //返回默认信息\n                    return await DefaultResponseMessageAsync(requestMessage).ConfigureAwait(false);\n                case DefaultMessageHandlerAsyncEvent.SelfSynicMethod:\n                    //返回同步信息\n                    return await Task.Run(syncMethod).ConfigureAwait(false);\n                default:\n                    throw new MessageHandlerException($\"DefaultMessageHandlerAsyncEvent 类型未作处理：{base.DefaultMessageHandlerAsyncEvent.ToString()}\");\n            }\n        }\n\n        /// <summary>\n        /// 【异步方法】认返回消息（当任何OnXX消息没有被重写，都将自动返回此默认消息）\n        /// </summary>\n        public virtual async Task<IResponseMessageBase> DefaultResponseMessageAsync(IRequestMessageBase requestMessage)\n        {\n            return await Task.Run(() => DefaultResponseMessage(requestMessage)).ConfigureAwait(false);\n        }\n        /// <summary>\n        /// 执行微信请求\n        /// </summary>\n        public override async Task BuildResponseMessageAsync(CancellationToken cancellationToken)\n        {\n            #region NeuChar 执行过程\n\n            //var neuralSystem = NeuralSystem.Instance;","sourceCodeStart":279,"sourceCodeEnd":315,"githubUrl":"https://github.com/JeffreySu/WeiXinMPSDK/blob/be573f6f94bdbf718dd5f6cdecb137fbc7ff651e/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/MessageHandlers/WxOpenMessageHandler.cs#L279-L315","documentation":"DefaultAsyncMethod dispatches unhandled async message events either to DefaultResponseMessageAsync or to a synced sync method, based on base.DefaultMessageHandlerAsyncEvent. Any enum value outside those two throws MessageHandlerException('DefaultMessageHandlerAsyncEvent 类型未作处理').","triggerScenarios":"An unhandled OnEvent_XXX async method is invoked (e.g. OnEvent_ChargeServiceQuotaNotifyRequestAsync, OnEvent_SecVodUploadRequestAsync, OnEvent_SecVodAuditRequestAsync, OnEvent_WxAliveFollowNotifyRequestAsync, OnEvent_WxAlivePushMessageNotifyRequestAsync, OnEvent_RetailRefundNotifyRequestAsync) while DefaultMessageHandlerAsyncEvent holds an unexpected enum value.","commonSituations":"Base class introduced a new enum member (e.g. via SDK upgrade) while the derived WxOpenMessageHandler's switch was not updated; custom message handler hierarchy overriding DefaultMessageHandlerAsyncEvent incorrectly.","solutions":["Upgrade Senparc.Weixin.WxOpen so DefaultAsyncMethod covers all DefaultMessageHandlerAsyncEvent values","Ensure DefaultMessageHandlerAsyncEvent is only set to DefaultMessageHandlerAsyncEvent.DefaultResponseMessage or SelfSynicMethod","Override DefaultResponseMessageAsync() to handle new event types gracefully","Override the specific OnEvent_XXXAsync methods (e.g. OnEvent_SecVodUploadRequestAsync) instead of relying on the default path"],"exampleFix":"// before\n// base handler with no DefaultResponseMessageAsync override; unknown enum value set\nmessageHandler.DefaultMessageHandlerAsyncEvent = (DefaultMessageHandlerAsyncEvent)99;\n// after\nmessageHandler.DefaultMessageHandlerAsyncEvent = DefaultMessageHandlerAsyncEvent.DefaultResponseMessage;\npublic override Task<IResponseMessageBase> DefaultResponseMessageAsync(IRequestMessageBase requestMessage)\n    => Task.FromResult<IResponseMessageBase>(CreateResponseMessage<ResponseMessageText>());","handlingStrategy":"validation","validationCode":"if (!Enum.IsDefined(typeof(DefaultMessageHandlerAsyncEvent), messageHandler.DefaultMessageHandlerAsyncEvent) || messageHandler.DefaultMessageHandlerAsyncEvent == (DefaultMessageHandlerAsyncEvent)99) { throw new InvalidOperationException(\"Unsupported DefaultMessageHandlerAsyncEvent\"); }","typeGuard":"bool IsSupported(DefaultMessageHandlerAsyncEvent e) => e == DefaultMessageHandlerAsyncEvent.DefaultResponseMessage || e == DefaultMessageHandlerAsyncEvent.SelfSynicMethod;","tryCatchPattern":"try { response = await handler.DefaultAsyncMethod(...); } catch (MessageHandlerException ex) { Log(ex); response = handler.CreateResponseMessage<ResponseMessageText>(); }","preventionTips":["Only assign DefaultMessageHandlerAsyncEvent.DefaultResponseMessage or SelfSynicMethod","Always override DefaultResponseMessageAsync in custom handlers","Keep SDK versions aligned across Senparc.* packages","Override new OnEvent_XXXAsync methods when upgrading"],"tags":["weixin","enum","default-handler","internal-invariant"],"backgroundTag":"invalid-enum-value","analyzedSha":"be573f6f94bdbf718dd5f6cdecb137fbc7ff651e","analyzedAt":"2026-09-12T10:01:50.733Z","contentChangedAt":"2026-09-12T10:01:50.733Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}