ServiceStack - 如何从RequestFilter返回ResponseDTO?

时间:2013-02-28 17:06:47

标签: error-handling request servicestack

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

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

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

上面的答案说明了如何选择过滤器以及如何失败,而不是如何返回成功的替代响应。 How to find Service from ServiceStack RequestFilter显示了如何创建适当的ResponseDTO。关键是您将ResponseDTO序列化到响应流,然后关闭流。我想ServiceStack使用它作为提示不运行服务或任何其他过滤器。