我使用RequestFilter将一些消息预处理到Web服务,如果有错误,我想返回一个ResponseDTO,然后杀死对请求的进一步处理。我怎样才能实现这一功能?
另外,我通过在RequestDTO类上使用[RequestFilter]装饰器来实现它。如果我想要多个请求过滤器,如何选择用于给定RequestDTO的过滤器?
答案 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使用它作为提示不运行服务或任何其他过滤器。