這是ServiceStack的Error Handling wiki page。
這是什麼意思,如果您的自定義例外實施IResponseStatusConvertible
,您可以控制如何序列化ResponseStatus。這裏是ValidationException實現它的源代碼,例如:
public class ValidationException : ArgumentException, IResponseStatusConvertible
{
public IEnumerable<ValidationFailure> Errors { get; private set; }
public ValidationException(IEnumerable<ValidationFailure> errors) : base(BuildErrorMesage(errors)) {
Errors = errors;
}
private static string BuildErrorMesage(IEnumerable<ValidationFailure> errors) {
var arr = errors.Select(x => "\r\n -- " + x.ErrorMessage).ToArray();
return "Validation failed: " + string.Join("", arr);
}
public ResponseStatus ToResponseStatus()
{
var errors = Errors.ConvertAll(x =>
new ValidationErrorField(x.ErrorCode, x.PropertyName, x.ErrorMessage));
var responseStatus = ResponseStatusUtils.CreateResponseStatus(typeof(ValidationException).Name, Message, errors);
return responseStatus;
}
}
但這只是控制ResponseStatus是如何序列化,而不是如何創建通用的響應。查看IAppHost.ServiceExceptionHandler
的描述,或者如果要更改返回的錯誤響應,請使用自定義服務運行器。
嗨德米斯,我們正在使用IAppHost.ExceptionHandler而不是IAppHost.ServiceExceptionHandler這是沒有觸發。我們遇到的問題是我們的錯誤響應被附加到ServiceStack產生的缺省響應。我們也會看看Service Runner。非常感謝 – 2013-03-14 17:11:22
@MarcoSerina只會爲服務中的異常解僱IAppHost.ServiceExecptionHandler。對於外部發生的異常(例如過濾器,請求綁定等),您可以使用'IAppHost.ExceptionHandler'。 – mythz 2013-03-14 17:39:30