当我';m处理服务之外发生的异常
本文关键字:异常 服务 处理 当我 | 更新日期: 2023-09-27 18:26:11
使用ServiceStack,在两个位置实现异常处理/日志记录非常重要:
-
每个
ServiceRunner<T>
的内部。public class MyServiceRunner<T> : ServiceRunner<T> { public override object HandleException(IRequestContext requestContext, T request, Exception ex) { // Implement your exception handling/logging here. // T request is your request DTO. } }
-
在AppHost内部,这样您就可以处理在服务之外发生的未处理的异常。
public override void Configure(Container container) { ExceptionHandler = (req, res, operationName, ex) => { //Handle Unhandled Exceptions occurring outside of Services //E.g. Exceptions during Request binding or in filters: } }
我的问题:
- 在#1中,您可以轻松访问请求DTO(即用于日志记录目的)
- 当我处理服务之外发生的异常时,我是否可以访问请求DTO(或等效的请求负载)
在ServiceStack v4中,请求DTO可从IRequest.Dto
获得,但您需要使用IAppHost.ServiceExceptionHandlers
和IAppHost.UncaughtExceptionHandlers
注册服务和未知异常处理程序
在ServiceStack V3中,您可以注册一个GlobalRequestFilter,它将请求DTO存储在IRequestContext.Items
字典中,稍后您可以从请求上下文中获得该字典。