如何只允许一个方法或Web服务的GET请求?

时间:2010-08-19 01:19:24

标签: c# asp.net web-services iis-7

正如我found here,我可以更改webconfig以允许/禁止webservices上的方法。

我只需要一个方法来成为GET,而对于其他方法它应该是一个POST,有没有办法只配置一个方法(或者如果没有其他方法可能是webservice)来接受GET请求?我在IIS7上。

2 个答案:

答案 0 :(得分:1)

取决于网络服务器。

例如,您可以在Apache中返回某些请求的错误。

使用Limit指令:

<Directory />
  Options All
  AllowOverride All
  <Limit POST PUT DELETE CONNECT PROPFIND PROPPATCH>
    # Require valid-user
    Deny from all
  </Limit>
</Directory>

修改 - 刚刚找到有关此文档的文档:http://httpd.apache.org/docs/2.0/mod/core.html#limit

答案 1 :(得分:1)

您可以通过在IIS中或通过web.config中定义的httpHandler映射更改处理程序映射来完成此操作。

或者你可以让一个HttpModule来做它。

但是,既然你已经在使用asp.net(从你的标签判断)并且你只有一个例外,那么更简单的方法可能只是在那个级别上做。如果没有,那么从HttpModule中执行此操作的逻辑就大致相同。

在你的基于页面的类中(如果你还没有在System.Web.UI.Control.Page和你自己的页面之间定义一个抽象类,它可能值得一看,它是一个放置常用的方便的地方方法)放置一个在主页面加载处理程序之前调用的虚拟成员(例如,有一个名为OnLoad的方法调用它,然后调用你的“实际”页面加载方法)。

在此方法中,检查使用的http方法,如果不正确,请将状态代码设置为405,输出奖励标记的错误页面,然后停止所有处理。

在允许获取,覆盖和更改您检查的方法的页面中。

如果您的类结构不允许轻松完成,那么HttpModule方法将更容易。在这里,您必须检查URI以了解允许哪种方法,但其余方法几乎相同。