3

我们正在运行托管在 Windows Azure 中的 WCF 服务,并尝试从托管在其他地方的网站执行 POST 请求,但这已被证明非常棘手。显然,在 iis7 端的实际 POST 请求之前允许 OPTIONS 预检请求似乎真的很困难。

即使我们在 web.config<system.webserver> 中有定义

  <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Origin,X-Requested-With,Content-Type,Accept" />
        <add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS"/>
      </customHeaders>
    </httpProtocol>

并且为了安全

<security>
  <requestFiltering>
    <verbs>
      <add verb="OPTIONS" allowed="true" />
    </verbs>
  </requestFiltering>
</security>

我们不断收到 HTTP 405 Method not Allowed 响应。

我在stackoverflow的不同帖子中尝试了多种技巧,但我开始绝望,因为似乎没有任何效果......网站在Chrome中工作,因为它似乎不关心预检响应,但IE挂在HTTP 405响应上。

有谁知道无论如何都可以通过 web.config(以及如何)允许预检 OPTIONS 请求,或者我们是否需要开始为预检请求实现我们自己的处理程序(如果是这样的话,一个例子会很棒:))?

谢谢,马蒂

4

2 回答 2

1

看看这个线程。我认为 WebDAV 安装在 Web 角色上(虽然无法确认)。您必须 RDP 到 Web 角色实例并检查是否是这种情况。如果是,您将需要创建启动任务来删除 WebDAV。

您还可以查看有关如何通过 appcmd 或 vbscript 在 IIS 中配置动词的文章(两者都可以通过启动任务执行)

看来这些东西必须在应用程序主机配置级别配置,不允许在 web.config 级别。

于 2012-12-07T12:22:57.803 回答
1

IIS(至少版本 7.*)肯定有预检请求处理的错误。我正在使用经典的 asp 并将此代码添加到 Web.config 解决了这个问题

    <handlers>
        <remove name="OPTIONSVerbHandler" />
        <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="IsapiModule" scriptProcessor="C:\Windows\System32\inetsrv\asp.dll" resourceType="Unspecified" requireAccess="None" />
    </handlers>
于 2016-11-03T15:13:57.087 回答