我正在Azure上构建一个REST API,但是当我试图通过PUT方法访问端点时,我得到一个HTTP 405 "Method Not Allowed"
状态以及一个IIS错误消息:
由于无效,无法显示您正在查找的页面方法(HTTP动词)正在使用。
我如何启用PUT方法,以及其他可能被Azure的默认配置设置默认阻止的方法?
我试着添加一个网页。配置文件到我的应用程序的根,并在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的世界对我来说很陌生。如有任何帮助,不胜感激。
谢谢!
为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处理程序的路径。
要完成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>
非常简单,但仅用于info
更新:固定路径
添加到您的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="*"
允许所有的动词。