我正在寻找一种简洁的方法来区分$metadata
请求与实体请求与WCF数据服务( 5.5.0 )。
而不是在HTTP模块级别应用身份验证(作为已注册的IHttpModule
),我似乎必须在请求生命周期中稍后应用它。
不幸的是,我认为可以应用它的唯一“更晚”时间(并且不会干扰$metadata
请求)是QueryInterceptor
方法。这里的问题是,它们中有很多,而且我甚至需要复制所有这些方法调用来验证请求,这似乎很愚蠢。
我的问题可归结为:在WCF数据服务请求生命周期的哪一点,我应该执行身份验证,而不是干扰$metadata
请求; 或,如何测试请求是否为$metadata
,以便我可以将身份验证逻辑提升回更高的方法。
在我看来,(读取:应该)是一个浮动的IsMetadataRequest
属性,从而允许:
protected override void OnStartProcessingRequest(ProcessRequestArgs args) {
base.OnStartProcessingRequest(args);
if (IsMetadataRequest) {
return;
}
// proceed with auth
}
我可以将一些东西放到一个只读取URI的服务基类中,但似乎应该有更多的定义。