Error handling ServiceStack-如何从RequestFilter返回ResponseDTO?
我正在使用RequestFilter预处理一些发送到web服务的消息,如果有错误,我希望返回ResponseDTO,然后终止对请求的进一步处理。如何实现该功能Error handling ServiceStack-如何从RequestFilter返回ResponseDTO?,error-handling,request,servicestack,Error Handling,Request,servicestack,我正在使用RequestFilter预处理一些发送到web服务的消息,如果有错误,我希望返回ResponseDTO,然后终止对请求的进一步处理。如何实现该功能 另外,我通过在RequestDTO类上使用[RequestFilter]装饰器来实现这一点。如果我想有多个请求筛选器,如何选择用于给定请求的筛选器?如果有错误,我想返回一个ResponseDTO,然后终止对请求的进一步处理。如何实现该功能?不确定如何确定错误,因此这是一个非常基本的解决方案 public class RequestFilt
另外,我通过在RequestDTO类上使用[RequestFilter]装饰器来实现这一点。如果我想有多个请求筛选器,如何选择用于给定请求的筛选器?如果有错误,我想返回一个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");
}
}
}
如果我希望有多个请求筛选器,如何选择用于给定请求的筛选器?
您可以创建几个不同的RequestFilter实现,并用不同的实现装饰每个DTO
public class FilterOneAttribute : Attribute, IHasRequestFilter
{
//Code
}
public class FilterTwoAttribute : Attribute, IHasRequestFilter
{
//Code
}
[FilterOne]
public class OneClass
{
//Code
}
[FilterTwo]
public class TwoClass
{
//Code
}
上面的答案说明了如何选择过滤器以及如何失败,但没有说明如何返回成功的替代响应。显示如何创建适当的ResponseTo。关键是将ResponseDTO序列化到响应流,然后关闭该流。我猜ServiceStack会以此作为提示,不运行服务或任何其他筛选器。请注意,您可以修饰相应的服务而不是DTO,以避免与消费者共享请求筛选器实现。对,关闭响应流告诉ServiceStack请求已被处理,它应该停止对请求的进一步处理。建议关闭响应流的方法是使用
httpRes.EndServiceStackRequest()
扩展方法,该方法还将写出任何全局头(如果指定)。