C# WCF服务应仅允许自定义谓词

C# WCF服务应仅允许自定义谓词,c#,web-services,wcf,C#,Web Services,Wcf,我在wcf服务中工作,它应该只允许一些自定义动词。 我正在接口上使用[WebInvoke(UriTemplate=“/path”,Method=“VERB”,ResponseFormat=WebMessageFormat.Xml,RequestFormat=WebMessageFormat.Xml,BodyStyle=WebMessageBodyStyle.Bare)]来接收请求。 我需要的是服务应该只允许Method=“VERB”,对于其他方法,它应该返回405作为错误。它适用于除Method

我在wcf服务中工作,它应该只允许一些自定义动词。 我正在接口上使用
[WebInvoke(UriTemplate=“/path”,Method=“VERB”,ResponseFormat=WebMessageFormat.Xml,RequestFormat=WebMessageFormat.Xml,BodyStyle=WebMessageBodyStyle.Bare)]
来接收请求。
我需要的是服务应该只允许Method=“VERB”,对于其他方法,它应该返回405作为错误。它适用于除Method=“GET”之外的所有请求。我想返回405,以便也“获取”

我创建了一个测试项目,并检查您的问题。我指定了
Method=“VERB”
,效果很好。服务拒绝所有其他方法(包括GET)。但如果您想要完全控制,我建议使用
Method=“*”
然后拒绝所有其他无效方法,如:

if (!HttpContext.Current.Request.HttpMethod.Equals("VERB", StringComparison.OrdinalIgnoreCase)) 
    return 405;

如果您想要完全控制,我建议您编写自己的WCF拦截器类,该类在每个传入请求上运行。另一个解决方案是编写自己的HTTP模块,并将其应用于承载WCF服务的IIS应用程序。通常,使用asp.net web.config文件很容易做到这一点,我假设WCF web.config文件不是这样。在我的代码中,GET方法的请求甚至没有达到检查动词的条件。