我正在使用 OpenRasta 2.0 构建一个 REST API,它的可扩展性非常好——例如,我们已经成功地使用 DotNetOpenAuth 轻松地插入了 OAuth 身份验证。
但是,我现在已经到了需要定义错误条件的响应的地步。我们正在采用有关 HTTP 错误代码的标准——但我也意识到返回有意义的响应,就像 Twitter(REST 的常年示例)所做的那样:
{
"error":"This method requires authentication.",
"request":"\/1\/statuses\/followers.json"
}
从我们所有的处理程序返回 OperationResult、手动捕获异常并映射到 ResponseResource 的最佳方式是什么?与 OpenRasta 的其他功能相比,这在我看来是相当大的开销。
还是我们应该编写某种贡献者来捕获管道中抛出的异常并全局处理问题?也许只翻译特定类型的异常(RestException?)。
基本上,我对最好的做法是什么以及其他人如何处理它有一种感觉。
谢谢。
编辑:
今天看了一段时间后,我无法弄清楚如何包装处理程序调用 - 我已经声明自己是一个 OperationInterceptor 派生类,并将其挂接到管道中ResourceSpace.Uses.PipelineContributor<OperationInterceptorContributor>()
并设置了一个自定义依赖项,ResourceSpace.Uses.CustomDependency<IOperationInterceptor, ExceptionHandlerInterceptor>(DependencyLifetime.PerRequest)
但无论在哪个在我尝试并包装在 try-catch 中的方法中,异常仍然冒泡。
是吗RewriteOperation
,BeforeExecute
或者AfterExecute
那是最合适的陷阱 - 如果是的话,你能给我一个关于如何开始的线索吗?
谢谢。