Iis 7.5 ASP.NET Web API仅在某些服务器上为PUT返回404
我已经编写了一个使用ASP.NET MVC Web API的网站,在我将其放到登台服务器之前,一切都很正常。该站点在我的本地机器和devweb服务器上运行良好。开发服务器和临时服务器都是Windows Server 2008 R2 问题是:基本上站点是可以工作的,但是有些API调用使用HTTP PUT方法。它们在返回404时失败,但在其他地方可以正常工作 我遇到并解决的第一个问题是请求过滤。但还是得到了404 我已在IIS中打开跟踪,并遇到以下问题Iis 7.5 ASP.NET Web API仅在某些服务器上为PUT返回404,iis-7.5,asp.net-mvc-4,asp.net-web-api,Iis 7.5,Asp.net Mvc 4,Asp.net Web Api,我已经编写了一个使用ASP.NET MVC Web API的网站,在我将其放到登台服务器之前,一切都很正常。该站点在我的本地机器和devweb服务器上运行良好。开发服务器和临时服务器都是Windows Server 2008 R2 问题是:基本上站点是可以工作的,但是有些API调用使用HTTP PUT方法。它们在返回404时失败,但在其他地方可以正常工作 我遇到并解决的第一个问题是请求过滤。但还是得到了404 我已在IIS中打开跟踪,并遇到以下问题 168. -MODULE_SET_RESPON
168. -MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName IIS Web Core
Notification 16
HttpStatus 404
HttpReason Not Found
HttpSubStatus 0
ErrorCode 2147942402
ConfigExceptionInfo
Notification MAP_REQUEST_HANDLER
ErrorCode The system cannot find the file specified. (0x80070002)
dev和staging上的配置是相同的,事实上整个站点是一个直接副本
为什么GET和POST有效,而PUTs无效?那些IIS服务器上安装了web dav模块,我打赌它不需要,安装它是因为安装者勾选了所有框 只需从iis中删除web dav 或者使用web.config删除web dav模块:
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
...
...
对于未启用WebDAV但仍使用MVC 4的Web API遇到此问题的用户
Steve Michelotti记录了一个对我有效的解决方案
在一天结束时,我在我的web配置中启用了ExtensionlessUrlHandler-Integrated-4.0处理程序的所有谓词(verb=“*”)
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
我的主机提供商无法卸载WebDAV,因为这会影响所有人 runAllManagedModulesForAllRequests=“true”虽然有效,但不推荐使用 许多修复包括删除WebDAVModule的模块,但仍然不起作用。我还删除了处理程序,最后我可以使用所有动词POST-GET-PUT-DELETE 删除模块和处理程序中的WebDAVModule和WebDAV
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
西风公司的Rick Strahl建议: < handlers> < remove name="ExtensionlessUrlHandler-Integrated-4.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" /> < /handlers>
这对我来说非常有效。我解决了这个问题,将网站的应用程序池更改为集成模式,而以前它是经典模式 我修复了删除UrlScan ISAPI过滤器的问题在我的情况下,这些解决方案都不适用 我通过将我的应用程序池改为集成版而不是经典版来修复它 处理程序:
它不适用于经典应用程序池,因为它的
前提条件是integratedMode
出现这种情况的原因很多。以上这些对我都不起作用。我已经在web.config中设置了ExtensionlessUrlHandler,其中包含所有必需的HTTP谓词。最后,我不得不在IIS中进行以下更改:
- 在IIS中选择您的网站并双击处理程序映射
- 找到
ExtensionlessUrlHandler-ISAPI-4.0\u 32bit
并双击
- 在出现的对话框中,单击请求限制
PUT
和DELETE
Ok
,并在弹出的编辑脚本映射
对话框中回答Yes
ExtensionlessUrlHandler-ISAPI-4.0\u 64位重复上述操作
希望这对某人有所帮助:)嗨,对我来说,所有的解决方案都不起作用。我终于做到了: 1) 在IIS中选择您的应用程序
2) 转到请求筛选
3) 然后选择HTTP谓词选项卡
4) 我发现PUT和其他动词允许false,但无法直接编辑,因此我删除了该动词,然后在右侧窗格中选择allow verb或右键单击列表并选择它。输入你遇到麻烦的动词,瞧
希望这能帮助别人 我的回答有用吗?你试过了吗?是的,它确实有效,谢谢。这对我来说解决了(这个问题原来是这个问题的重复)。对我来说,只有部分有效。请注意,应该避免runAllManagedModulesForAllRequests,这里似乎不需要它。正是这个-->使一切正常工作。它告诉IIS忽略处理程序中设置的“先决条件”。我们的DevOps团队会对动词=“*”感到畏缩,但这实际上是在配置IIS以接受所有动词。您还可以在IIS HttpHandlers配置屏幕中手动更改这些处理程序的配置。添加对我来说是解决问题的方法。有时WebDAV是PUT问题的罪魁祸首,但事实上,这个问题特别是WebApi(使用无扩展url处理程序)我建议大家先试试Kevin Ortman的答案。如果您使用OWIN中间件并在IIS上托管,那么问题很可能是因为OWIN只支持集成模式,这非常有帮助!这应该先检查一下,这对我很有效。但我很想知道根本原因是什么。我刚刚更新了一些ASP.NETWebAPI包,这些包自动更改了Web.config中的一些设置,问题就开始了。IIS上绝对没有任何更改。