我正在寻找一种干净的方法来区分$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 的服务基类中,但似乎应该有更多定义的东西。