首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在处理OpenRasta处理程序中的异常时,转换为响应的最佳方法是什么?

在处理OpenRasta处理程序中的异常时,转换为响应的最佳方法是什么?
EN

Stack Overflow用户
提问于 2010-11-15 16:11:17
回答 1查看 943关注 0票数 1

我使用OpenRasta 2.0构建了一个REST,它的扩展性非常棒--例如,我们已经成功地使用DotNetOpenAuth进行了插件式的OAuth身份验证。

然而,我现在已经到了需要定义错误条件响应的时候了。我们正在采用有关HTTP错误代码的标准--但我也很清楚地返回有意义的响应,就像Twitter (REST的常年示例)一样:

代码语言:javascript
运行
复制
{
 "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中包装哪种方法,异常仍然是泡影。

RewriteOperationBeforeExecute还是AfterExecute是最合适的陷阱--如果是的话,你能给我一个如何开始的线索吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-15 17:16:32

为了达到你想要的目的,你可以做几件事。

首先,您可以构建一个IOperationInterceptor,它将对处理程序的调用封装在try/catch块中,并在ICommunicationContext上分配正确的OperationResult。

然后,如果您希望在json中序列化它,您将希望将操作结果的ResponseResource属性分配给描述错误的类型(现在我们称之为"TitsUpResource“)。

最后,将该类型注册为没有URI的资源,这样就可以将json编解码器添加到其中。

ResourceSpace.Has.ResourcesOfType().WithoutUri.TranscodedBy或者其他你想要的东西。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4186306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档