首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全局请求/响应拦截器

全局请求/响应拦截器
EN

Stack Overflow用户
提问于 2013-07-08 12:08:17
回答 3查看 1.3K关注 0票数 8

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

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

一个定制的ServiceRunner和覆盖OnBeforeExecuteOnAfterExecute方法似乎很好,但我发现它很有侵扰性,因为整个应用程序都需要替换服务运行程序,而且我无法找到一种干净的方法来隔离每个功能中需要在这些方法中执行的任务。

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

更新:

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-08 16:19:40

对于如何在自定义请求/响应筛选器中检索服务类型,我已经找到了一个解决方案:

代码语言:javascript
复制
appHost.RequestFilters.Add((req, res, requestDto) =>
{
    var metadata = EndpointHost.Metadata;
    Type serviceType = metadata.GetServiceTypeByRequest(requestDto.GetType());

    ...
}
票数 3
EN

Stack Overflow用户

发布于 2013-07-08 16:30:48

一个自定义的ServiceRunner和覆盖OnBeforeExecute和OnAfterExecute方法似乎很好,但是我发现它很有侵扰性,因为整个应用程序都需要替换服务运行程序。

请注意,您可以选择加入并只选择应该使用自定义服务运行程序的请求,例如:

代码语言:javascript
复制
public override IServiceRunner<TRequest> CreateServiceRunner<TRequest>(
  ActionContext actionContext)
{           
    return useCustomRunner(actionContext.RequestType)
      ? new MyServiceRunner<TRequest>(this, actionContext)
      : base.CreateServiceRunner<TRequest>(actionContext);
}
票数 3
EN

Stack Overflow用户

发布于 2013-07-08 14:38:48

IHttpRequest有OperationName。我想这就是你想要的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17526236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档