/// <summary> /// 拦截器 /// </summary> /// <param name="invocation"></param> public void Intercept(IInvocation invocation) { MethodInfo methodInfo = null; try { methodInfo = invocation.MethodInvocationTarget; if (methodInfo == null) { methodInfo = invocation.Method; } // 执行方法 invocation.Proceed(); } catch (Exception ex) { // 书写异常日志 NGPExceptionLog error = new NGPExceptionLog { ApiUrl = _workContext.CurrentRequest.Url, Parameters = _workContext.CurrentRequest.Parameter, BusinessMethod = string.Format("{0}.{1}.{2}", methodInfo.ReflectedType.Namespace, methodInfo.ReflectedType.Name, methodInfo.Name), ExceptionContent = string.IsNullOrEmpty(ex.Message) ? (ex.InnerException != null ? ex.InnerException.Message : "Unknow Error") : ex.Message, OperatedBy = _workContext.Current != null ? _workContext.Current.EmplId : string.Empty, OperatedDept = _workContext.Current != null ? _workContext.Current.DeptId : string.Empty, Exception = ex }; _logPublisher.RegisterError(error); // 设定返回值 INGPResponse response = invocation.ReturnValue as INGPResponse; if (response == null) { response = Activator.CreateInstance(methodInfo.ReturnType) as INGPResponse; } response.Message = CommonResource.OperatorException; response.Status = OperateStatus.Error; response.ErrorCode = ErrorCode.SystemError; invocation.ReturnValue = response; } }
/// <summary> /// 处理操作 /// </summary> /// <param name="request">请求参数</param> /// <param name="ctx">上下文参数</param> /// <returns>返回处理结果</returns> public virtual INGPResponse HandleProcess(INGPRequest request, TContext ctx) { INGPResponse result = null; do { // 当前执行结果 result = Process(request, ctx); IProcessCommand <TContext> step = null; if (!_steps.TryDequeue(out step) || step == null) { break; } var nextRequest = result as INGPRequest; step.HandleProcess(nextRequest, ctx); }while (_steps.Count > 0); return(result); }