Eat*_*oku 55 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
Run Code Online (Sandbox Code Playgroud)
网址如下"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" />
Run Code Online (Sandbox Code Playgroud)
Joh*_*n P 74
要使IIS 7.5接受PUT和DELETE以获得PHP 5.4快速CGI驱动的REST API,我必须禁用WebDAV模块.否则,WebDAV模块使用PUT或DELETE干预HTTP请求.然而,要使这项工作有点令人困惑,我可能错过了一些步骤或以其他顺序完成它.
这些行作为应用程序根目录<system.webServer>中web.config中-element的子项放置.
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
Run Code Online (Sandbox Code Playgroud)
希望这可能会让人感到沮丧.看起来服务器的默认设置是接受未列出的任何HTTP动词 - 请参阅下面的设置Request filtering -> HTTP Verbs -> Edit feature Settings.可以考虑明确添加要允许的VERBS.可以指定允许的动词附加此片段,也作为子片段<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>
Run Code Online (Sandbox Code Playgroud)
在客户端计算机上,可以从此处卸载WebDAV模块:
Control Panel -> Uninstall Program -> Turn Windows features on or off -> IIS -> World Wide Web Services -> Common HTTP feautre -> WebDAV Publishing
Run Code Online (Sandbox Code Playgroud)
让它运作的最后一项措施是通过编辑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 ----------------------------------------------|
Run Code Online (Sandbox Code Playgroud)
小智 29
1.转到IIS管理器.
2.点击你的应用程序.
3.转到"处理程序映射".
4.在功能列表中,双击"WebDAV".
5.单击"请求限制".
6.在"动词"选项卡中选择"所有动词".
7.按OK.
Ser*_*Seb 11
请参阅从OR维基链接的http://learn.iis.net/page.aspx/901/iis-express-faq/.
从链接(为了便于阅读而不是块引用):
答:您可以修改IIS快速applicationHost.config的在%userprofile%\documents\IISExpress\config文件夹中.例如,为无扩展名Urls启用PUT和DELETE,向下滚动到IIS Express applicationHost.config文件的底部,并查找以以下内容开头的处理程序条目:
<add name="ExtensionlessUrl-Integrated-4.0" ...
在verb添加属性PUT和DELETE因此verb属性的样子:verb="GET,HEAD,POST,DEBUG,PUT,DELETE".
小智 9
我的方案是IIS 7.5上的网站中的Web应用程序.该网站必须继续启用WebDAV,但Web应用程序需要将其关闭才能在其REST API中支持PUT和DELETE.
为了实现这一点,Web应用程序的Web.config需要这样:
<modules runAllManagedModulesForAllRequests="true" runManagedModulesForWebDavRequests="true" >
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
Run Code Online (Sandbox Code Playgroud)
与其他答案的重要区别在于需要runManagedModulesForWebDavRequests ="true"
小智 7
对我来说,这可以解决web.config中的问题.
<system.webserver>
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<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" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<system.webserver/>
<system.web>
<authentication mode="Windows" />
<identity impersonate="true"/>
<system.web/>
Run Code Online (Sandbox Code Playgroud)
我使用了以下配置:
- IIS 7.5
- Windows Server 2008 R2
- 自定义应用程序池,.NET 4.0,集成
- Windows身份验证= true
- 匿名身份验证= false
希望能帮助到你.;-)
进入处理程序映射并设置 WebDAV 来处理所有动词是唯一对我有用的事情,尽管事实上PUT和DELETE已经被列为已处理动词。我的工作 web.config 是:
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<remove name="WebDAV" />
<add name="WebDAV" path="*" verb="*" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />
</handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88614 次 |
| 最近记录: |