IIS 7.5 + 为 RESTFul 服务启用 PUT 和 DELETE,无扩展

标签 iis put openrasta

我试图了解 IIS 7.5 如何处理 POST 和 PUT 请求。

我正在使用 OpenRasta 框架编写 RESTful 服务。 POST 操作可以正常工作,但对同一 URL 的 PUT 操作则不然。它返回如下错误

Detailed Error Information
Module: IIS Web Core
Notification: MapRequestHandler
Handler: StaticFile
Error Code: 0x80070002

网址如下所示:“http://localhost/MyService/Resource.Something.manifest”

相同的设置在 Visual Studio 开发 IIS 中运行良好。

解决方案

基本上,默认的 ExtensionlessUrlHandler 不接受 PUT 和 DELETE 动词。只需添加它们即可。

<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />

最佳答案

为了让 IIS 7.5 接受 PHP 5.4 快速 CGI 驱动的 REST API 的 PUT 和 DELETE,我必须禁用 WebDAV 模块。否则,WebDAV 模块将使用 PUT 或 DELETE 来干预 HTTP 请求。然而,要完成这项工作有点令人困惑,我可能错过了一些步骤或以其他顺序完成。

这些行被放置为 <system.webServer> 的子行- 应用程序根目录中 web.config 中的元素。

<modules>
    <remove name="WebDAVModule" />
</modules>
<handlers>
    <remove name="WebDAV" />
</handlers>

希望这可以减轻一些挫败感。服务器的默认设置似乎是接受任何未列出的 HTTP 动词 - 请参阅 Request filtering -> HTTP Verbs -> Edit feature Settings 下的设置。人们可以考虑明确添加允许的动词。允许的动词可以在附加此片段后指定,也可以作为 <system.webServer> 的子级。 .

    <security>
        <requestFiltering>
            <verbs allowUnlisted="false">
                <add verb="GET" allowed="true" />
                <add verb="POST" allowed="true" />
                <add verb="DELETE" allowed="true" />
                <add verb="PUT" allowed="true" />
            </verbs>
        </requestFiltering>
    </security>

在客户端计算机上,可以从此处卸载 WebDAV 模块:

Control Panel -> Uninstall Program -> Turn Windows features on or off -> IIS -> World Wide Web Services -> Common HTTP feautre -> WebDAV Publishing

让它工作的最后一个措施是编辑 applicationhost.config发现于C:\Windows\System32\inetsrv\config<system.webServer> -> <handlers>内你会看到一个 php 条目,其中只有 verb="GET,HEAD,POST - 修改它以添加您需要的动词,例如:

<add name="PHP54_via_FastCGI" path="*.php" verb="GET,HEAD,PUT,DELETE,POST"/>
                                                                 |
                                                                 |
                                                                 |
append verbs here  ----------------------------------------------|

关于IIS 7.5 + 为 RESTFul 服务启用 PUT 和 DELETE,无扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6739124/

相关文章:

asp.net-core - .NET Core 3 - IIS - 应用程序初始化不起作用

php - 使用 Slim PHP 获取 PUT 参数

c# - 带有 OpenRasta 和 ASP.NET MVC 的 REST API

get - OpenRasta URI 映射到错误方法并返回不一致的 http 状态代码

iis - 如何在Windows Server 2016的IIS上禁用HTTP/2

c# - 在 IIS 中运行时无法显示消息框?

python - 如何使用 IIS 6 + FastCGI + Django 设置启用 SSL?

ajax - Ember Data 在应该 PUT 时更新 POST

python - Pycurl PUT 请求到 JIRA REST API 等待 100 继续