我正在使用 RequestFilter 将一些消息预处理到 Web 服务,如果有错误我想返回一个 ResponseDTO,然后终止对请求的进一步处理。我怎样才能实现该功能?
此外,我通过在 RequestDTO 类上使用 [RequestFilter] 装饰器来实现这一点。如果我想拥有多个请求过滤器,如何选择要用于给定 RequestDTO 的过滤器?
我正在使用 RequestFilter 将一些消息预处理到 Web 服务,如果有错误我想返回一个 ResponseDTO,然后终止对请求的进一步处理。我怎样才能实现该功能?
此外,我通过在 RequestDTO 类上使用 [RequestFilter] 装饰器来实现这一点。如果我想拥有多个请求过滤器,如何选择要用于给定 RequestDTO 的过滤器?
如果有错误我想返回一个 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
}
上面的答案告诉了如何选择过滤器以及如何失败,但没有告诉如何返回成功的替代响应。How to find Service from ServiceStack RequestFilter展示了如何创建合适的 ResponseDTO。关键是您将 ResponseDTO 序列化为响应流,然后关闭该流。我猜 ServiceStack 将此作为不运行服务或任何其他过滤器的提示。