gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:38:15 24 4
gpt4 key购买 nike

我正在使用 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吗, BeforeExecuteAfterExecute那是最适合设置陷阱的地方 - 如果可以的话,你能给我一个关于如何开始的线索吗?

谢谢。

最佳答案

您可以做几件事来实现您想要的。

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

然后,如果您希望在 json 中对其进行序列化,您需要将 operationresult 的 ResponseResource 属性分配给描述您的错误的类型(我们现在将其称为“TitsUpResource”)。

最后,将该类型注册为没有URI的资源,这样你就可以向它添加json编解码器了

ResourceSpace.Has.ResourcesOfType().WithoutUri.TranscodedBy 或您可能需要的任何其他内容。

关于c# - 在 OpenRasta 处理程序中处理异常时,转换为响应的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4186306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com