假设我有多项服务。一项服务是调用另一项服务来获取某些东西。该服务还从第三方供应商处获取一些信息。假设第三方供应商返回了带有429状态代码的Too Many Requests消息。调用第三方供应商的方法由许多其他方法使用,可以通过GET请求或在另一个Http请求中直接调用。
当我检测到429状态代码时,我抛出了一个自定义异常(让我们说TooManyRequestsException)并使用Mapper将代码发送给请求者。
Config.MapExceptionToStatusCode.Add(typeof(TooManyRequestsException),429);
如果直接调用该方法,则可以正常工作。但显然我忘记了这个方法是由服务中的许多其他方法调用的,而所有其他方法都使用通用的System.Exception对象包装此异常,并在catch块中包含自定义消息。
除了使用System.Exception更改包装异常的所有方法之外,我还有哪些其他选项?我试图过去http://docs.servicestack.net/error-handling但是找不到能帮助我的方法,或者无法理解它。
答案 0 :(得分:0)
我建议查看Overriding OnExceptionTypeFilter in your AppHost,这样您就可以应用自定义逻辑来检查异常并自定义返回的ResponseStatus
:
public override void OnExceptionTypeFilter(
Exception ex, ResponseStatus responseStatus)
{
var argEx = ex as ArgumentException;
var isValidationSummaryEx = argEx is ValidationException;
if (argEx != null && !isValidationSummaryEx && argEx.ParamName != null)
{
var paramMsgIndex = argEx.Message.LastIndexOf("Parameter name:");
var errorMsg = paramMsgIndex > 0
? argEx.Message.Substring(0, paramMsgIndex)
: argEx.Message;
responseStatus.Errors.Add(new ResponseError
{
ErrorCode = ex.GetType().Name,
FieldName = argEx.ParamName,
Message = errorMsg,
});
}
}