1

そこで、応答を返す todo サービスを修正しました。

以下のServiceExceptionHandler コードをテストするために意図的に未処理のエラーをスローする場合、デフォルトを使用すれば問題ありません/Backbone.Todos/todo/1?format=json

しかし、私が使用する/Backbone.Todos/todo/1?format=xmlと、次のように表示されます。

XML 解析エラー: 整形式ではありません場所: /Backbone.Todos/todo/1 行番号 1、列 2:

これが私のコードです:

public class AppHost : AppHostBase {
    public override void Configure(Funq.Container container) {
        //Unhandled errors
        this.ServiceExceptionHandler = (req, ex) => {
            var res = new { //i return a dynamic object here ... and it doesn't work
                Result = null as object,
                ResponseStatus = new ResponseStatus() {
                ErrorCode = "Error",
                Message = "Not available",
                StackTrace = "Not available"
                }
            };
            return res;
        };
    //...
    }
//....
}

//My normal request/response dtos look like this:
//-----------------------------------------
[Route("/todo/{id}", "GET")] //display req
public class GetTodo : IReturn<TodoResponse> {
    public long Id { get; set; }
}
public class TodoResponse : IHasResponseStatus {
    public IList<Todo> Result { get; set; }
    public ResponseStatus ResponseStatus { get; set; }
}

問題は、エラーが発生したときに、それがどのタイプであるかを知らずに正しいタイプの応答を作成できないことです。着信要求と例外のみをパラメーターとして取得しますが、応答タイプは取得しません。

4

1 に答える 1

3

XML が .net の動的オブジェクトを自動的にシリアル化できないため、エラーが発生したと思われます。

あなたが何をしようとしているのか完全にはわかりませんが、組み込みのユーティリティを使用して例外を処理し、必要に応じて変更することができます。

this.ServiceExceptionHandler = (req, ex) =>
{
    var responseStatus = ex.ToResponseStatus();
    var errorResponse = ServiceStack.ServiceHost.DtoUtils.CreateErrorResponse(req, ex, responseStatus);
    return errorResponse;
};
于 2012-10-18T20:20:28.770 に答える