所以我修改了给我响应的 todo 服务。
当我故意抛出一个未处理的错误来测试下面的 ServiceExceptionHandler 代码时,如果我使用 default/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; }
}
问题是,当发生错误时,我无法在不知道它是什么类型的情况下构建正确类型的响应。我只将传入的请求和异常作为参数,而不是响应类型。