自定义异常处理程序从未在ServiceStack 4中调用

时间:2014-03-18 14:27:23

标签: servicestack

在ServiceStack 3中,我有一个自定义处理程序,在异常的情况下装饰结果DTO:

ServiceExceptionHandler = (request, exception) =>
{
    var ret = DtoUtils.HandleException(this, request, exception);
    var error = ret as HttpError;

    if ( error == null )
        return ret;

    // ...
    error.Response = new MyErrorResponse
    {
        ResponseStatus = responseStatus,
        // ...
    };

    return ret;
};

迁移到ServiceStack 4后,我尝试了不同的钩子:

  1. ServiceExceptionHandlers.Add
  2. OnExceptionTypeFilter
  3. 拥有覆盖HandleException的ServiceRunner
  4. 发生异常时,都没有调用它们。我错过了什么? 我正在使用新的基于任务的服务,如果这是相关的。

    编辑:我的解决方案中包含的简单测试服务会触发挂钩:

    [Route("/test")]
    public class TestRequest : IReturn<int>
    {
    }
    
    public class TestService : Service
    {
        public Task<int> Get(TestRequest request)
        {
            throw new Exception("Ha!");
        }
    }
    

    Edit2:似乎是处理异步服务的错误。如果我将异常从处理程序的同步部分移动到异步部分,则不会调用任何钩子:

    public class TestService : Service
    {
        public async Task<int> Get(TestRequest request)
        {
            await Task.Yield();
            throw new Exception("Ha!");
        }
    }
    

0 个答案:

没有答案