【问题标题】:PUT and DELETE returns 404 for asp.net webapi in Windows 2008 Server IIS 7 and 7.5PUT 和 DELETE 在 Windows 2008 Server IIS 7 和 7.5 中为 asp.net webapi 返回 404
【发布时间】:2012-08-27 04:13:02
【问题描述】:

PUT/DELETE 使用 Windows 2008 服务器 IIS 时,我遇到 500 - 内部服务器错误。我得到的回应是:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>500 - Internal server error.</title>
<style type="text/css">
<!--
Formatting 
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
 <div class="content-container"><fieldset>
  <h2>500 - Internal server error.</h2>
  <h3>There is a problem with the resource you are looking for, and it cannot be displayed.</h3>
 </fieldset></div>
</div>
</body>
</html>

当我检查我的 WebAPI 的自定义日志时,我发现调用甚至没有访问服务。

我之前的经验是 PUTDELETE 出现 404 - Not Found,这种行为在 Win7 和 Win 2008 Server 中是一致的。为此I found this fix:

我应用了修复程序,PUT/DELETE 在 windows 7 上工作。但之后在 win2008 服务器的 IIS 7 上部署相同的服务时,我没有得到 400。但我得到 “500 - 内部服务器错误” 来自 IIS 或什至在此之前的东西。

相同的代码在 Windows 7 (IIS 7.5) 上完美运行。

有解决此类问题的线索吗?

2012 年 8 月 29 日编辑:

500-Internal Server Error问题通过在 IIS7 中启用故障跟踪来检测。修复就是这个配置。

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

基本上我们需要从模块中删除“WebDAVModule”,并从处理程序中删除“WebDAV”。但现在我又回到了我的旧问题 404-Not Found。现在,即使在进行了以下配置后,我也无法让 PUT/DELETE 工作:

  <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" />

不同寻常的是,相同的 Web 应用程序可以在同一系统相同的 IIS 上单独托管(不在默认网站下)完美运行。所以我怀疑这是由于某些父网站配置过滤了 PUT/DELETE 请求。

有相同的想法吗?

【问题讨论】:

  • 请不要以 cmets 的身份发布更正。您可以使用问题底部的 edit 链接,然后修复问题所在。谢谢。
  • 这个问题好像没有解决办法

标签: iis-7 asp.net-web-api


【解决方案1】:

在为一个非常相似的问题苦恼之后,我想到了这个解决方案: http://www.iis.net/configreference/system.webserver/security/requestfiltering/verbs

使用请求过滤设置,我能够在 IIS 中全局允许 PUT 和 DELETE 动词,这解决了我的问题。它结束了我对 404.6 错误的噩梦。 (顺便说一句,我没有安装 webDAV 并且确实将动词添加到 ExtensionlessUrlHandler)

希望这些信息可以节省一些时间。

【讨论】:

  • 更多微软的“默认破解”系统。
【解决方案2】:

我让 Neil S 的信息更准确:

  1. 从“模块”中删除 WebDAV
  2. 从“处理程序映射”中删除 WebDAV
  3. 我从 IIS 组件中删除 WebDAV 以确保 WebDAV 不存在并重新启动 Windows
  4. 转到“Handler Mappings”并找到ExtensionlessUrlHandler(适用于32和64以及Integrated),打开它并转到“Request Restrictions”到第二章“Verbs”并将一些你需要的方法放到字符串中。我有下一个: GET、HEAD、POST、DEBUG、PUT 我重复三个“ExtensionlessUrlHandler”状态的更改。
  5. 我不更改请求过滤设置

所以,Put 方法的 404 和 405 错误消失了,我收到 200 状态。

这个解决方案对我有用。

【讨论】:

    【解决方案3】:

    我最近在我的 Win Server 2008 R2 / IIS 7.5 上遇到了同样的问题,我花了几个小时才发现它是由 LiveStreamingHandler 引起的。 IIS 上的LiveStreamingHandler 模块导致PUTDELETE HTTP 动词错误。

    使用添加和删除程序卸载Media Services 4.1并重新启动服务器可解决此问题。希望这对某人有所帮助。

    【讨论】:

      【解决方案4】:

      尝试通过添加打开自定义错误

      <customErrors mode="Off" />
      

      当您浏览到 API 控制器时,您将看到 500 错误的实际原因,例如:http://staging.site.com/api/book

      您会从实际的异常消息中找到更多线索。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-06
        • 1970-01-01
        • 2013-09-27
        • 2011-10-08
        • 2011-03-20
        • 2023-03-18
        • 2012-08-29
        相关资源
        最近更新 更多