如何从ServiceStack RequestFilter发现服务(How to find Serv

2019-07-21 06:49发布

我想实现一个RequestFilter是有条件执行的基础上,在信息Service ,将被调用。 我想使RequestFilter找到Service ,看它的方法/接口/属性,并有条件地以此为基础进行的工作。

我知道,你可以声明RequestFilterAttributeService ,但我不能想出一个好办法,使其有条件的。 我想一个委托/λ传递到属性,但是C#不允许。 我可以插入A型或名称到那里,使RequestFilterAttribute找到Service类/方法,但似乎容易复制/粘贴错误。

所以我留下了希望某种方式为RequestFilterRequestFilterAttribute了解该Service它作用于(或申报),然后想查找里面的方法Service ,将提供使所需的逻辑/禁用过滤器的码。 我不知道如果IoC容器的一些功能提供了这一点,或者有一些其他的方式来做到这一点,还是不行。

然后,基于怎样的滤波器来执行,可能需要返回自己的数据,从实际执行阻断服务。 这可能吗? (是这个答案是什么?)

Answer 1:

这似乎是关键:

var serviceType = EndpointHost.Metadata.GetServiceTypeByRequest(requestDto.GetType());

这将返回处理请求的服务类型。 这不是一个实例(但我怀疑一个服务实例,甚至尚未创建),这样做的条件逻辑我必须定义一个静态方法,然后看看它。 我使用反射来找到宣告特殊属性的方法,并且需要以优化以获得最佳性能。

从那里,我可以有条件地决定是否运行一些逻辑。 我也可以跳过调用服务,如果我喜欢,并返回一个成功响应,如下所示:

var successResponse = DtoUtils.CreateSuccessResponse(successMessage);
var responseDto = DtoUtils.CreateResponseDto(requestDto, successResponse);
var contentType = req.ResponseContentType;
res.ContentType = contentType;
res.WriteToResponse(req, responseDto);
// this is the proper way to close the request; you can use Close() but it won't write out global headers
res.EndServiceStackRequest();
return;

或者,我可以创造一个错误响应,或者从刚刚返回RequestFilter并让服务正常执行。



文章来源: How to find Service from ServiceStack RequestFilter