Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何将自定义HttpOperationHandler添加到MVC3REST服务器?_Asp.net_Wcf - Fatal编程技术网

Asp.net 如何将自定义HttpOperationHandler添加到MVC3REST服务器?

Asp.net 如何将自定义HttpOperationHandler添加到MVC3REST服务器?,asp.net,wcf,Asp.net,Wcf,我的后端服务器是使用Microsoft WCF REST Starter Kit Preview 2构建的。我想向所有请求添加一些请求处理,除了那些通过使用属性标记而显式禁用的方法。我有一百多个服务方法,我只想从这个额外的处理中排除几个。如果有必要的话,我会把它们都贴上标签,但我会尽量避免破坏已经写好的东西 我还没有看到任何可以添加到WebInvoke的内容,添加拦截器不会让我检查请求路由到的方法 我要求解释如何注册HttpOperationHandler对象,以便在将其传递给路由到的方法之前,

我的后端服务器是使用Microsoft WCF REST Starter Kit Preview 2构建的。我想向所有请求添加一些请求处理,除了那些通过使用属性标记而显式禁用的方法。我有一百多个服务方法,我只想从这个额外的处理中排除几个。如果有必要的话,我会把它们都贴上标签,但我会尽量避免破坏已经写好的东西

我还没有看到任何可以添加到WebInvoke的内容,添加拦截器不会让我检查请求路由到的方法


我要求解释如何注册HttpOperationHandler对象,以便在将其传递给路由到的方法之前,我可以进行额外的请求处理(即基于请求头中的信息进行授权)。有人能解释一下如何做到这一点,而不用重写我现有的代码库来使用Web API吗?

您不能将HttpOperationHandler与WCF REST初学者工具包一起使用。但是,Web API与为WCF REST初学者工具包创建的ServiceContracts非常兼容。您应该能够相对轻松地在Web API主机中重新托管它们。您可能必须更改访问WebOperationContext的位置,但这不应该是一个巨大的更改。

我通过采用另一种方法解决了我的问题。它验证所有请求。我无法控制它适用于哪种方法,但我能够解决这个问题

我创建了一个自定义类来处理授权头。
CheckAccess()
方法返回true以允许请求通过,如果用户未经身份验证或未被授权执行服务,则返回false。我通过创建一个自定义类并在其
CreateServiceHost()
方法中为
Authorization.ServiceAuthorizationManager
分配一个实例,将其连接到我的服务的
ServiceHost

虽然我不能直接检查正在执行的服务的方法属性,但传递给
CheckAccess()
的对象的
Message.Headers
成员有一个
to
属性,该属性包含正在调用的服务的URI。如果有必要,我可以检查它以确定请求将路由到哪个方法


ServiceAuthorizationManager
适用于所有请求,因此不必用任何特殊属性标记web方法或类来启用它。

谢谢,Darrel。我已经看过你关于这个主题的许多帖子,非常感谢你抽出时间来帮助我。由于我不想在我的应用程序中添加另一层未发布的库,因此我决定使用自定义ServiceAuthorizationManager对所有请求进行身份验证,如下所述+1获取信息。