这是 ServiceStack 的错误处理 wiki 页面。
它的意思是,如果您的自定义异常实现,您可以控制ResponseStatus的序列化方式IResponseStatusConvertible
。这是实现它的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
如果要更改返回的错误响应,请查看描述或使用自定义服务运行程序。