【问题标题】:How do you implement a response filter in ServiceStack to filter out unwanted DTO's如何在 ServiceStack 中实现响应过滤器来过滤掉不需要的 DTO
【发布时间】:2016-04-27 13:04:41
【问题描述】:

我找不到任何关于如何在 ServiceStack 中实现响应过滤器的完整教程。

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

我最终想要做的是实现一个过滤器,删除任何经过身份验证的人不应该看到的 DTO。一种“捕捉任何不可能的结果”以 100% 高枕无忧,以防某些初级人员不小心弄乱了 SQL 存储过程并返回错误的结果,以及其他情况。

谁能指出我正确的方向?来自 Github Wiki 的代码不知道如何/在哪里放置和使用它!

【问题讨论】:

    标签: filter servicestack


    【解决方案1】:

    文档显示了如何在 register a Response Filter 中注册 AppHost.Configure() - 这是应该维护所有 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();
        }
    });
    

    因此,如果未经身份验证的用户调用返回响应 DTO 的服务,该响应 DTO 实现了 ISpecialDto,他们将收到一个空的 403 Forbidden 响应。

    【讨论】:

    • 我认为我的术语有点片面。 “过滤不需要的 DTO”是指 DTO 包含对象列表的位置,然后我想删除任何不需要的对象。我对隐藏在 Global.asax 中的“AppHost”类感到困惑。感谢您的帮助!
    猜你喜欢
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    相关资源
    最近更新 更多