本文转载自微信公众号《UP技控》,作者conan5566。转载本文请联系UP技控公众号。问题通常我们在开发webAPI时,通常需要记录API的输入输出信息,以方便后续排查问题;那我们平时是怎么做的呢,一般我们在公共的地方写一个public的方法来控制输入输出。这次Func什么是FuncFunc封装了一个方法,它接受一个参数,返回一个TResult参数指定类型的值。使用Func委托来表示无需显式声明自定义委托即可作为参数传递的方法。封装的方法必须对应于此委托定义的方法签名。也就是说,封装的方法必须有一个按值传递给它的参数,并且必须返回一个值。使用Func委托时,不必显式定义一个只用一个参数包装方法的委托。主要代码实现1.定义委托。privateApiResultHandleWork(CreateBQoolSyncEventModelsyncModel,Funcwork){//先记录到DbEvent_innerBQoolSyncEventLogService.Create(syncModel);varresult=newApiResult();try{_logger.Info($"CallWebApiStart,data:{syncModel.ToJsonString()}");result=work();if(!result.Success&&!string.IsNullOrEmpty(result.Code)&&string.IsNullOrEmpty(result.ErrorMessage)){result.ErrorMessage=ApiResultCode.ErrorMessages[result.Code];}}catch(Exceptionex){_logger.Error(ex.ToString());result.Success=false;if(string.IsNullOrEmpty(result.ErrorMessage)){result.ErrorMessage=ex.Message;}else{result.ErrorMessage+=";"+ex.Message;}}finally{_logger.Info($"CallWebApiEnd,result:{result.ToJsonString()}");//更新DbeventsyncModel.SetStatus(result.Success?BQoolSyncEventStatus.Success:BQoolSyncEventStatus.Failure);_innerBQoolSyncEventLogService.ChangeStatus(syncModel.Id,syncModel.Status,result.ErrorMessage);}returnresult;}2、把方法当做参数,输入委托托。[HttpPost]publicApiResultModuleFeatureSetting(ReviewsApiRequestModelmodel){stringdata=StringTools.AESDecrypt(model.Encrypt);varparam=JObject.Parse(data).ToObject();ApiResultresult=HandleWork(newCreateBQoolSyncEventModel(param.Account,BQoolSyncEventType.ModuleFeatureSetting,参数),()=>_ReviewsSettingSyncService.ModuleFeatureSetting(param));returnresult;}3、查看日志。