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
か、使用してください。