【发布时间】:2010-08-19 01:19:24
【问题描述】:
正如我 found here 一样,我可以更改 webconfig 以允许/禁止 web 服务上的方法。
我只需要一种方法成为 GET,而其他方法应该是 POST,有没有一种方法可以只配置一种方法(或者如果没有其他方法,可能是 web 服务)来接受 GET 请求?我在 IIS7 上。
【问题讨论】:
标签: c# asp.net web-services iis-7
正如我 found here 一样,我可以更改 webconfig 以允许/禁止 web 服务上的方法。
我只需要一种方法成为 GET,而其他方法应该是 POST,有没有一种方法可以只配置一种方法(或者如果没有其他方法,可能是 web 服务)来接受 GET 请求?我在 IIS7 上。
【问题讨论】:
标签: c# asp.net web-services iis-7
您可以通过在 IIS 中或通过 web.config 中定义的 httpHandler 映射更改处理程序映射来实现。
或者你可以让一个 HttpModule 来做。
但是,由于您已经在使用 asp.net(根据您的标签来判断)并且您只有一个例外,那么一种更简单的方法可能就是在该级别进行操作。如果不是,则从 HttpModule 执行此操作的逻辑大致相同。
在您的页面基类中(如果您尚未在 System.Web.UI.Control.Page 和您自己的页面之间定义一个抽象类,它可能值得一看,这是一个方便放置常用的地方方法)在主页面加载处理程序之前放置一个被调用的虚拟成员(例如,有一个名为 OnLoad 的方法调用它,然后是你的“真实”页面加载方法)。
在这个方法中,检查使用的http方法,如果不正确,设置状态码为405,输出加分错误页面,然后停止所有处理。
在您的页面中允许获取、覆盖和更改您检查的方法。
如果您的类结构不允许轻松完成此操作,那么 HttpModule 方法会更容易。在这里,您必须检查 URI 以了解允许使用哪种方法,但其余部分几乎相同。
【讨论】:
取决于网络服务器。
例如,您可以在 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
【讨论】: