我想实现一个RequestFilter
是有条件执行的基础上,在信息Service
,将被调用。 我想使RequestFilter
找到Service
,看它的方法/接口/属性,并有条件地以此为基础进行的工作。
我知道,你可以声明RequestFilterAttribute
的Service
,但我不能想出一个好办法,使其有条件的。 我想一个委托/λ传递到属性,但是C#不允许。 我可以插入A型或名称到那里,使RequestFilterAttribute
找到Service
类/方法,但似乎容易复制/粘贴错误。
所以我留下了希望某种方式为RequestFilter
或RequestFilterAttribute
了解该Service
它作用于(或申报),然后想查找里面的方法Service
,将提供使所需的逻辑/禁用过滤器的码。 我不知道如果IoC容器的一些功能提供了这一点,或者有一些其他的方式来做到这一点,还是不行。
然后,基于怎样的滤波器来执行,可能需要返回自己的数据,从实际执行阻断服务。 这可能吗? (是这个答案是什么?)
这似乎是关键:
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
并让服务正常执行。