在ServiceStack中为特定服务执行请求/响应拦截器的最简单方法是什么?
请求筛选器(IHasRequestFilter)工作正常,但是如果服务返回非2xx状态代码,则不会触发响应筛选器(IHasResponseFilter)。我需要检索方法返回的状态代码以及响应DTO (如果有的话)。
一个定制的ServiceRunner和覆盖OnBeforeExecute和OnAfterExecute方法似乎很好,但我发现它很有侵扰性,因为整个应用程序都需要替换服务运行程序,而且我无法找到一种干净的方法来隔离每个功能中需要在这些方法中执行的任务。
在ServiceStack中是否有我缺少的扩展点,允许我在每个服务方法之前和每个服务方法之后执行一些代码?插件是理想的,但我如何订阅一些虚构的BeforeExecute和AfterExecute方法,使我能够运行一些自定义代码?
更新:
在发布了这个问题之后,我发现无论服务返回什么状态代码,都执行全局响应过滤器,这正是我所需要的。最后一个问题是:是否有可能检索将在请求筛选器中处理请求的服务类型?我需要检查这个服务是否由自定义标记属性来修饰。
发布于 2013-07-08 16:19:40
对于如何在自定义请求/响应筛选器中检索服务类型,我已经找到了一个解决方案:
appHost.RequestFilters.Add((req, res, requestDto) =>
{
var metadata = EndpointHost.Metadata;
Type serviceType = metadata.GetServiceTypeByRequest(requestDto.GetType());
...
}发布于 2013-07-08 16:30:48
一个自定义的ServiceRunner和覆盖OnBeforeExecute和OnAfterExecute方法似乎很好,但是我发现它很有侵扰性,因为整个应用程序都需要替换服务运行程序。
请注意,您可以选择加入并只选择应该使用自定义服务运行程序的请求,例如:
public override IServiceRunner<TRequest> CreateServiceRunner<TRequest>(
ActionContext actionContext)
{
return useCustomRunner(actionContext.RequestType)
? new MyServiceRunner<TRequest>(this, actionContext)
: base.CreateServiceRunner<TRequest>(actionContext);
}发布于 2013-07-08 14:38:48
IHttpRequest有OperationName。我想这就是你想要的。
https://stackoverflow.com/questions/17526236
复制相似问题