使用旧 API - 继承自定义基类
当您使用旧的 API 来处理异常时,您应该提供一个自定义基类并重写 HandleException 方法,例如:
public class MyRestServiceBase<TRequest> : RestService<TRequest>
{
public override object HandleException(TRequest request, Exception ex)
{
...
return new HttpError(..);
}
}
然后,为了利用自定义错误处理,让所有服务继承您的类,例如:
public class MyRestService : MyRestServiceBase<RestServiceDto>
{
public override object OnGet(RestServiceDto request)
{
}
}
使用新 API - 使用 ServiceRunner
否则如果你正在使用ServiceStack改进的New API那么你不需要让所有服务都继承基类,而是可以通过重写 CreateServiceRunner 来告诉 ServiceStack 在 AppHost 中使用自定义运行器:
public override IServiceRunner<TRequest> CreateServiceRunner<TRequest>(
ActionContext actionContext)
{
return new MyServiceRunner<TRequest>(this, actionContext);
}
其中 MyServiceRunner 只是一个实现您感兴趣的自定义挂钩的自定义类,例如:
public class MyServiceRunner<T> : ServiceRunner<T> {
public override object HandleException(IRequestContext requestContext,
TRequest request, Exception ex) {
// Called whenever an exception is thrown in your Services Action
}
}