我正在使用OpenRasta 2.0來構建REST API,並且其可擴展性非常好 - 我們已經管理好了例如使用DotNetOpenAuth非常輕鬆地插入OAuth身份驗證。在處理OpenRasta處理程序中的異常時,轉換爲響應的最佳方式是什麼?
但是我現在已經到了需要爲錯誤條件定義我們的響應的地步。我們正在通過有關HTTP錯誤代碼標準 - 但我Concious酒店返回有意義的反應,以及,非常像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
這是最合適的地方陷阱 - 如果是的話,你可以給我一個線索如何開始?
謝謝。
不要添加OperationInterceptorContributor,沒有必要這樣做。您可以將操作攔截器添加爲方法的屬性,或者希望處理函數的處理程序,或者僅在IoC容器中爲IOperationInterceptor接口註冊攔截器(並使其成爲瞬態),然後完成操作,您可以在您選擇的IoC中或通過.Has.CustomDependency方法執行此操作。 – SerialSeb 2010-11-17 14:08:02
似乎我錯過了那一個。它在重寫中,將try/catch中的原始調用(傳遞給重寫方法的委託)包裝起來。 – SerialSeb 2011-02-23 15:09:19