【问题标题】:How do I allow the GET request for only one method or webservice?如何只允许一种方法或 Web 服务的 GET 请求?
【发布时间】:2010-08-19 01:19:24
【问题描述】:

正如我 found here 一样,我可以更改 webconfig 以允许/禁止 web 服务上的方法。

我只需要一种方法成为 GET,而其他方法应该是 POST,有没有一种方法可以只配置一种方法(或者如果没有其他方法,可能是 web 服务)来接受 GET 请求?我在 IIS7 上。

【问题讨论】:

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


    【解决方案1】:

    您可以通过在 IIS 中或通过 web.config 中定义的 httpHandler 映射更改处理程序映射来实现。

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

    但是,由于您已经在使用 asp.net(根据您的标签来判断)并且您只有一个例外,那么一种更简单的方法可能就是在该级别进行操作。如果不是,则从 HttpModule 执行此操作的逻辑大致相同。

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

    在这个方法中,检查使用的http方法,如果不正确,设置状态码为405,输出加分错误页面,然后停止所有处理。

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

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

    【讨论】:

      【解决方案2】:

      取决于网络服务器。

      例如,您可以在 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

      【讨论】:

      • 我认为这行不通,我猜这是来自网站而不是服务器的配置...无论如何我无法测试,我在 IIS 上...谢谢反正
      • 好的,我刚才注意到了 iis7 标签。它确实有效,我用过很多次这样的东西。
      猜你喜欢
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      相关资源
      最近更新 更多