在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后,我尝试了不同的钩子:
发生异常时,都没有调用它们。我错过了什么? 我正在使用新的基于任务的服务,如果这是相关的。
编辑:我的解决方案中包含的简单测试服务会触发挂钩:
[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!");
}
}