{"record":{"id":"01f311474e3494af","repo":"JeffreySu/WeiXinMPSDK","slug":"createfromrequestmessage","errorCode":null,"errorMessage":"CreateFromRequestMessage过程发生异常","messagePattern":"CreateFromRequestMessage过程发生异常","errorType":"exception","errorClass":"WeixinException","httpStatus":null,"severity":"error","filePath":"src/Senparc.Weixin.Work/Senparc.Weixin.Work/Entities/Response/WorkResponseMessageBase.cs","lineNumber":93,"sourceCode":"\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ResponseMsgType.MpNews:\n\t\t\t\t\t\tresponseMessage = new ResponseMessageMpNews();\n\t\t\t\t\t\tbreak;\n                    case ResponseMsgType.NoResponse:\n                        responseMessage = new WorkResponseMessageNoResponse();\n\t\t\t\t        break;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new UnknownRequestMsgTypeException(string.Format(\"ResponseMsgType没有为 {0} 提供对应处理程序。\", msgType), new ArgumentOutOfRangeException());\n\t\t\t\t}\n\n\t\t\t\tresponseMessage.ToUserName = requestMessage.FromUserName;\n\t\t\t\tresponseMessage.FromUserName = requestMessage.ToUserName;\n\t\t\t\tresponseMessage.CreateTime = SystemTime.Now; //使用当前最新时间\n\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tthrow new WeixinException(\"CreateFromRequestMessage过程发生异常\", ex);\n\t\t\t}\n\n\t\t\treturn responseMessage;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// 获取响应类型实例，并初始化\n\t\t/// </summary>\n\t\t/// <typeparam name=\"T\">需要返回的类型</typeparam>\n\t\t/// <param name=\"requestMessage\">请求数据</param>\n\t\t/// <returns></returns>\n\t\tpublic static T CreateFromRequestMessage<T>(IWorkRequestMessageBase requestMessage) where T : WorkResponseMessageBase\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tvar tType = typeof(T);\n\t\t\t\tvar responseName = tType.Name.Replace(\"ResponseMessage\", \"\"); //请求名称\n\t\t\t\tResponseMsgType msgType = (ResponseMsgType)Enum.Parse(typeof(ResponseMsgType), responseName);","sourceCodeStart":75,"sourceCodeEnd":111,"githubUrl":"https://github.com/JeffreySu/WeiXinMPSDK/blob/be573f6f94bdbf718dd5f6cdecb137fbc7ff651e/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Entities/Response/WorkResponseMessageBase.cs#L75-L111","documentation":"CreateFromRequestMessage wraps any exception raised while constructing and populating the response message (including the UnknownRequestMsgTypeException from the default case and NullReferenceException if requestMessage is null) inside a WeixinException with this fixed message, chaining the original exception as InnerException.","triggerScenarios":"Any failure inside the factory: requestMessage is null, unmapped ResponseMsgType, or an assignment inside the try block throws.","commonSituations":"Feeding a null or malformed request entity into the response factory during message handling pipelines; logging code that only reads Message and misses the root cause in InnerException.","solutions":["Inspect ex.InnerException to find the actual cause — this message is only a wrapper","Null-check the requestMessage before calling CreateFromRequestMessage","Catch WeixinException around the call and log InnerException with its stack trace"],"exampleFix":"// before\ncatch (WeixinException ex) { log.Error(ex.Message); }\n// after\ncatch (WeixinException ex) { log.Error(ex.Message, ex.InnerException ?? ex); }","handlingStrategy":"try-catch","validationCode":"if (requestMessage == null)\n    throw new ArgumentNullException(nameof(requestMessage));","typeGuard":null,"tryCatchPattern":"try { var msg = WorkResponseMessageBase.CreateFromRequestMessage(request, msgType); }\ncatch (WeixinException ex) { log.Error(ex.Message, ex.InnerException); throw ex.InnerException ?? ex; }","preventionTips":["Always log InnerException — this error is only a wrapper","Null-check requestMessage before the factory call","Catch WeixinException once at the message-handling boundary instead of per call site"],"tags":["exception-wrapper","factory","weixin-exception"],"backgroundTag":"internal-invariant-violation","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"}