如何在Azure中启用PUT请求?

时间:2014-08-06 21:49:22

标签: php iis azure azure-web-sites

我在Azure上构建REST API,但是当我尝试通过PUT方法访问端点时,我收到HTTP 405 "Method Not Allowed"状态以及IIS错误消息:

  

由于无效,无法显示您要查找的页面   正在使用方法(HTTP动词)。

如何启用PUT方法以及Azure默认配置设置默认阻止的其他方法?

我尝试将web.config文件添加到我的应用程序的根目录,并在verbs元素上将allowUnlisted设置为true:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
   <system.webServer>
      <security>
         <requestFiltering>
            <verbs applyToWebDAV="false" allowUnlisted="true" />
         </requestFiltering>
      </security>
   </system.webServer>
</configuration>

这没有改变。

我是一个开源人员,所以IIS的世界对我来说非常陌生。任何帮助表示赞赏。

谢谢!

3 个答案:

答案 0 :(得分:9)

将以下内容添加到web.config元素中的system.webServer

<handlers>
  <remove name="PHP54_via_FastCGI" />
  <add name="PHP54_via_FastCGI" path="*.php" verb="GET, PUT, POST, HEAD, OPTIONS, TRACE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK" modules="FastCgiModule" scriptProcessor="D:\Program Files (x86)\PHP\v5.4\php-cgi.exe" resourceType="Either" requireAccess="Script" />
</handlers>

这适用于PHP的内置版本,当前默认值为PHP 5.4,但如果您选择了PHP 5.3或PHP 5.5,则需要修改php-cgi处理程序的路径。

答案 1 :(得分:2)

将此添加到您的web.config/system.webServer

<handlers>
  <remove name="ExtensionlessUrl-Integrated-4.0" />
  <add name="ExtensionlessUrl-Integrated-4.0"
       path="*."
       verb="GET,HEAD,POST,DEBUG,DELETE,PUT"
       type="System.Web.Handlers.TransferRequestHandler"
       preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

或者不是指定允许的动词,而是verb="*"允许所有动词。

答案 2 :(得分:1)

要完成cory_flower给出的答案,您应按给出的版本更改54

示例:7.2给出:

<handlers>
  <remove name="PHP72_via_FastCGI" />
  <add name="PHP72_via_FastCGI" path="*.php" verb="GET, PUT, POST, HEAD, OPTIONS, TRACE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK" modules="FastCgiModule" scriptProcessor="D:\Program Files (x86)\PHP\v7.2\php-cgi.exe" resourceType="Either" requireAccess="Script" />
</handlers>

相当琐碎,但仅用于信息

更新:固定路径