当我处理服务之外发生的异常时,我是否可以访问请求dto?

时间:2015-12-07 21:14:27

标签: c# servicestack servicestack-bsd

使用ServiceStack,在两个地方实现异常处理/日志记录非常重要:

  1. Inside of each 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.
              }
        }
    
  2. Inside of 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:
        }
     }
    
  3. 我的问题:

    • 在#1中,您可以轻松访问请求DTO(即用于记录目的)。
    • 当我处理服务之外发生的异常时,我是否可以访问请求DTO(或请求有效负载等效项)?

1 个答案:

答案 0 :(得分:2)

在ServiceStack v4中,可以从IRequest.Dto获取请求DTO,但您可以使用IAppHost.ServiceExceptionHandlersIAppHost.UncaughtExceptionHandlers

注册您的服务和未知异常处理程序

在ServiceStack V3中,您可以注册一个GlobalRequestFilter,它将请求DTO存储在IRequestContext.Items字典中,您可以稍后从请求上下文中获取该字典。