6

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

<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 的自定义日志时,我发现调用甚至没有命中服务。

我之前的经验是404 - Not Found for PUTandDELETE并且这种行为在 Win7 和 Win 2008 Server 中是一致的。为此,我找到了这个修复:

我应用了修复程序并PUT/DELETE在 Windows 7 上工作。但之后,当在 win2008 服务器的 IIS 7 上部署相同的服务时,我没有得到 400。但我从 IIS 或之前得到“500 - 内部服务器错误” 。

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

有关解决此类问题的任何线索?

2012 年 8 月 29 日编辑:

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

<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 请求。

有同样的想法吗?

4

4 回答 4

4

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

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

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

于 2013-02-21T18:51:08.757 回答
4

我使 Neil S 的信息更准确:

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

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

这个解决方案对我有用。

于 2015-06-08T09:39:30.493 回答
1

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

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

于 2013-10-11T14:09:15.440 回答
0

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

<customErrors mode="Off" />

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

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

于 2013-10-04T15:55:31.420 回答