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 に答える