如何在 Azure 中启用 PUT 请求?

Posted

技术标签:

【中文标题】如何在 Azure 中启用 PUT 请求?【英文标题】:How do I enable PUT requests in Azure? 【发布时间】:2014-08-06 21:49:21 【问题描述】:

我正在 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 的世界对我来说非常陌生。任何帮助表示赞赏。

谢谢!

【问题讨论】:

您使用什么语言? php、Node.js、ASP/ASP.NET 还是 Python? 我正在使用 PHP (Laravel 4)。 【参考方案1】:

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

<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 处理程序的路径。

【讨论】:

我已将这些解决方案添加到 Microsoft Azure 网站备忘单中。microsoftazurewebsitescheatsheet.info 这成功了!太感谢了!我已经被这个阻止了几个小时。我已经为备忘单添加了书签,这也非常有用。遗憾的是 MS 不允许在门户中配置 HTTP 方法,这似乎很明显。【参考方案2】:

要完成 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>

相当琐碎,但仅供参考

更新:固定路径

【讨论】:

【参考方案3】:

将此添加到您的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="*" 以允许所有动词。

【讨论】:

不,它不适用于 PHP。那是为 Asp.Net 准备的。但是你从来没有在问题中提到过 php。

以上是关于如何在 Azure 中启用 PUT 请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Security 中启用 POST、PUT 和 DELETE 方法

在带有 PKCE 的 OAuth 授权流中使用时如何在 Azure 应用注册中启用 CORS?

如何使用 Azure APIM 创建 OCSP 请求并验证响应?

Azure DevOps GIT(gitflow)如何在开发分支上强制执行拉取请求以保持源最新?

如何使用 Pulumi 在存储帐户上启用 Azure Defender?

如何在 Microsoft Azure windows server 2012 R2 中启用 Microsoft Access Driver (*.mdb, *.accdb)?