我在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的世界对我来说非常陌生。任何帮助表示赞赏。
谢谢!
答案 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>
相当琐碎,但仅用于信息
更新:固定路径