我确实认识到这不是正常的做事方式,所以在提出完整问题之前我会先解释一下。
我们正在连接一个外部的restful服务,它有8种我们使用的方法。它返回BaseResponse
并带有:
ResponseCode
ResponseDesc
Message
如果响应代码为-1,则操作成功,否则代码可能是大约+ -40错误中的任何一个。为了减轻每个处理器中有一个大量的switch语句,我创建了一个ResponseCodeHandler
,它存在于外部服务的项目中。
此处理程序解释代码并按如下方式抛出相关的错误消息:
throw new FaultException<OfflineFault>(new OfflineFault(), errorMessage);
现在看起来*几乎每个方法都会出现错误,我希望避免每个处理器中有40个捕获 - 几乎每个错误都需要以不同的方式处理,我不妨在任何地方切换。我也不能只重新抛出错误,因为如果抛出错误就需要设置某些项目。
我想知道以下内容是否可行(我需要在catch中找到OfflineFault
):
try
{
throw new FaultException<OfflineFault>(new OfflineFault(), "description");
}
catch (FaultException e)
{
audit.SetStatus(AuditTransactionStatus.Error, e.Message);
throw faultsource.Build<OfflineFault>();
}
faultource只是确保错误记录在任何地方等。
我意识到我可以通过审计和故障源,但我不愿意,因为它在当前设置中会有点hacky。
*仍在等待外部公司的反馈
编辑:按要求捕获所有内容的示例。我为所有代码创建了一个枚举,以提高可读性。
// all errors which must throw a offline fault
case ResponseCodes.HostUnavailable:
case ResponseCodes.HostTimeout:
throw faultSource.Build<OfflineFault>(operationName, errorMessage);
// Already registered faults
case ResponseCodes.UsernameAlreadyRegistered:
throw faultSource.Build<UsernameAlreadyRegisteredFault>(operationName, errorMessage);
case ResponseCodes.CellNumberAlreadyRegistered:
throw faultSource.Build<CellNumberAlreadyRegisteredFault>(operationName, errorMessage, ServiceFaultCode.CellNumber);
case ResponseCodes.EmailAlreadyRegistered:
throw faultSource.Build<EmailAlreadyRegisteredFault>(operationName, errorMessage, ServiceFaultCode.Email);
答案 0 :(得分:0)
从我能找到的一切都不可能。
如果捕获基本异常,则无法检索原始异常类型。
即。如果您遇到例外,您将无法发现它是以 OfflineFault 引发的。