{"record":{"id":"d07473cf646a244f","repo":"JeffreySu/WeiXinMPSDK","slug":"defaultmessagehandlerasyncevent-base","errorCode":null,"errorMessage":"DefaultMessageHandlerAsyncEvent 类型未作处理：{base.DefaultMessageHandlerAsyncEvent.ToString()}","messagePattern":"DefaultMessageHandlerAsyncEvent 类型未作处理：(.+?)","errorType":"exception","errorClass":"MessageHandlerException","httpStatus":null,"severity":"error","filePath":"src/Senparc.Weixin.MP/Senparc.Weixin.MP/MessageHandlers/Async/MessageHandlerAsync.cs","lineNumber":78,"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        /// 【异步方法】执行微信请求\n        /// </summary>\n        public override async Task BuildResponseMessageAsync(CancellationToken cancellationToken)\n        {\n            #region NeuChar 执行过程\n\n            var weixinAppId = this._postModel == null ? \"\" : this._postModel.AppId;\n\n            switch (RequestMessage.MsgType)\n            {\n                case RequestMsgType.Text:\n                    {\n                        try\n                        {","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/JeffreySu/WeiXinMPSDK/blob/be573f6f94bdbf718dd5f6cdecb137fbc7ff651e/src/Senparc.Weixin.MP/Senparc.Weixin.MP/MessageHandlers/Async/MessageHandlerAsync.cs#L60-L96","documentation":"In the async message-handling pipeline, DefaultAsyncMethod switches on base.DefaultMessageHandlerAsyncEvent to decide how to produce a default response (DefaultResponseMessageAsync or running the sync syncMethod). Any value outside the defined enum members throws MessageHandlerException, which can only happen if the enum was assigned an invalid/unknown value — an internal invariant violation.","triggerScenarios":"DefaultMessageHandlerAsyncEvent property set to a value not in {DefaultResponseMessageAsync, SelfSynicMethod} — typically via reflection, serialization restoring an out-of-range int, or a custom build/modified enum; direct invocation of DefaultAsyncMethod after tampering with the property.","commonSituations":"Deserializing handler config/state from cache or config that maps an obsolete enum numeric value; custom DI constructing the handler and setting DefaultMessageHandlerAsyncEvent incorrectly; upgrading SDK versions where enum members were renamed/removed.","solutions":["Leave DefaultMessageHandlerAsyncEvent at its default or set it explicitly to DefaultMessageHandlerAsyncEvent.DefaultResponseMessageAsync or SelfSynicMethod before executing the handler.","Search code/config for assignments to DefaultMessageHandlerAsyncEvent and remove invalid values.","Upgrade the SDK to ensure application and library enum versions match.","If you must intercept, catch MessageHandlerException around the Execute/DefaultAsyncMethod call and fall back to syncMethod."],"exampleFix":"// before\nhandler.DefaultMessageHandlerAsyncEvent = (DefaultMessageHandlerAsyncEvent)99;\nawait handler.ExecuteAsync();\n// after\nhandler.DefaultMessageHandlerAsyncEvent = DefaultMessageHandlerAsyncEvent.DefaultResponseMessageAsync;\nawait handler.ExecuteAsync();","handlingStrategy":"validation","validationCode":"if (!Enum.IsDefined(typeof(DefaultMessageHandlerAsyncEvent), handler.DefaultMessageHandlerAsyncEvent))\n{\n    handler.DefaultMessageHandlerAsyncEvent = DefaultMessageHandlerAsyncEvent.DefaultResponseMessageAsync;\n}","typeGuard":"bool isValidAsyncEvent(DefaultMessageHandlerAsyncEvent e) =>\n    e == DefaultMessageHandlerAsyncEvent.DefaultResponseMessageAsync ||\n    e == DefaultMessageHandlerAsyncEvent.SelfSynicMethod;","tryCatchPattern":"try\n{\n    await handler.ExecuteAsync();\n}\ncatch (MessageHandlerException ex)\n{\n    log.Error(\"Invalid DefaultMessageHandlerAsyncEvent\", ex);\n    handler.DefaultMessageHandlerAsyncEvent = DefaultMessageHandlerAsyncEvent.DefaultResponseMessageAsync;\n    await handler.ExecuteAsync();\n}","preventionTips":["Never cast ints to DefaultMessageHandlerAsyncEvent without Enum.IsDefined validation.","Do not persist handler enum state in cache/config; set it explicitly in code each time.","Keep SDK versions aligned across projects sharing this enum.","Set the property explicitly right after constructing the MessageHandler."],"tags":["wechat-sdk","csharp","message-handler","invalid-enum","internal-state"],"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"}