1

我正在使用 RequestFilter 将一些消息预处理到 Web 服务,如果有错误我想返回一个 ResponseDTO,然后终止对请求的进一步处理。我怎样才能实现该功能?

此外,我通过在 RequestDTO 类上使用 [RequestFilter] 装饰器来实现这一点。如果我想拥有多个请求过滤器,如何选择要用于给定 RequestDTO 的过滤器?

4

2 回答 2

2

如果有错误我想返回一个 ResponseDTO,然后终止对请求的进一步处理。我怎样才能实现该功能?不完全确定您将如何确定错误,因此这是一个非常基本的解决方案。

public class RequestFilterAttribute : Attribute, IHasRequestFilter
{
    public void RequestFilter(IHttpRequest req, IHttpResponse res, object requestDto)
    {
        if(requestDto.GetType() == typeof(YourRequestType))
        {
            //code to check for errors - if error throw exception 
            throw new Exception("Exception for your request type");
        }
    }
}

如果我想拥有多个请求过滤器,如何选择要用于给定 RequestDTO 的过滤器?

您可以创建几个不同的 RequestFilter 实现,并用不同的实现装饰您的每个 DTO。

public class FilterOneAttribute : Attribute, IHasRequestFilter
{
    //Code
}

public class FilterTwoAttribute : Attribute, IHasRequestFilter
{
    //Code
}

[FilterOne]
public class OneClass 
{
    //Code
}

[FilterTwo]
public class TwoClass
{
    //Code
}
于 2013-02-28T18:19:59.177 回答
1

上面的答案告诉了如何选择过滤器以及如何失败,但没有告诉如何返回成功的替代响应。How to find Service from ServiceStack RequestFilter展示了如何创建合适的 ResponseDTO。关键是您将 ResponseDTO 序列化为响应流,然后关闭该流。我猜 ServiceStack 将此作为不运行服务或任何其他过滤器的提示。

于 2013-03-10T15:57:19.590 回答