全局请求/响应拦截器

Dar*_*rov 6 servicestack

在ServiceStack中设置将为特定服务执行的请求/响应拦截器的最简单方法是什么?

请求过滤器(IHasRequestFilter)工作正常,但IHasResponseFilter如果服务返回非2xx状态代码,则不会触发响应过滤器().我需要检索方法返回的状态代码以及响应DTO(如果有的话).

一个自定义的ServiceRunner和覆盖OnBeforeExecuteOnAfterExecute方法似乎工作正常,但我发现它非常具有侵入性,因为需要为整个应用程序替换服务运行器,我找不到一种方法来清除每个功能需要的任务.在那些方法中执行.

ServiceStack中是否有一些我遗漏的扩展点允许我在每个服务方法之前和每个服务方法之后执行一些代码?一个插件是理想的,但我如何订阅一些虚构BeforeExecuteAfterExecute方法,允许我运行一些自定义代码?


更新:

在发布问题后,我发现无论服务返回什么状态代码,都会执行全局响应过滤器,这正是我所需要的.最后一个问题:是否可以检索将在请求过滤器中处理请求的服务类型?我需要检查此服务是否由某个自定义标记属性修饰.

Dar*_*rov 3

我找到了有关如何在自定义请求/响应过滤器中检索服务类型的问题的解决方案:

appHost.RequestFilters.Add((req, res, requestDto) =>
{
    var metadata = EndpointHost.Metadata;
    Type serviceType = metadata.GetServiceTypeByRequest(requestDto.GetType());

    ...
}
Run Code Online (Sandbox Code Playgroud)