1

我们目前使用 ServiceStack 作为服务供应的核心框架。有谁知道是否可以将自定义异常包装到自定义ErrorResponse对象中?

来自 SS 维基:

“除了上述选项之外,您还可以通过实现 IResponseStatusConvertible.ToResponseStatus() 方法来覆盖临时异常的序列化,并让它返回您自己填充的 ResponseStatus 实例。”

这似乎符合我的需要,但我不知道在哪里可以覆盖这个序列化。

同样,我尝试httphandler通过在 AppHost 中注册它们来使用自定义,但在发生异常时不会调用它们。

我当然错过了一些东西,有没有人可以指导我完成这个?

4

1 回答 1

1

这是 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如果要更改返回的错误响应,请查看描述或使用自定义服务运行程序。

于 2013-03-14T16:47:00.740 回答