如何在ServiceStack中实现响应过滤器以过滤掉不需要的DTO

时间:2016-04-27 04:42:02

标签: filter servicestack

我无法找到有关如何在ServiceStack中实现响应过滤器的完整教程。

我发现的最好的是代码的一部分: https://github.com/ServiceStack/ServiceStack/wiki/Request-and-response-filters#apply-custom-behavior-to-multiple-dtos-with-interfaces

我最终想要做的是实现一个过滤器,删除经过身份验证的人不应该看到的任何DTO。有点'抓住任何不可能的结果',以便100%安心,以防一些初级人员意外地破坏SQL存储过程并返回错误的结果,以及其他情况。

有人能指出我正确的方向吗?来自Github Wiki的代码可以避免如何/在何处使用它,并使用它!

1 个答案:

答案 0 :(得分:1)

文档显示了如何在AppHost.Configure()中注册register a Response Filter - 这是应该维护所有AppHost配置的地方。

不清楚你的意思是"过滤掉不需要的DTO",每个服务只返回一个DTO(响应),您可以返回,修改或选择通过短路响应完全不回来。

在下面的示例响应过滤器中,我们将阻止任何DTO实现自定义ISpecialDto接口,只返回经过身份验证的用户:

this.GlobalResponseFilters.Add((req, res, responseDto) => {
    var specialDto = responseDto as ISpecialDto;
    if (specialDto == null) return;

    var userSession = req.GetSession();
    if (!userSession.IsAuthenticated) 
    {
        res.StatusCode = (int)HttpStatusCode.Forbidden;
        res.StatusDescription = "Must be Authenticated";
        res.EndRequest();
    }
});

因此,如果未经过身份验证的用户调用返回实施ISpecialDto的响应DTO的服务,他们将收到空 403禁止响应。