ASP.NET MVC / IIS 7.5:仅针对静态内容的500内部服务器错误

14

一个在 IIS 7.5 下运行的 ASP.NET MVC 项目(但问题可能存在于早期版本和非 MVC 站点上),之前是正常工作的,现在对于由静态处理程序处理的内容 - 图像、页面等返回 500 内部服务器错误,但通过控制器本身处理的 MVC 工作正常。

我知道什么原因导致了这个问题,我正在记录下来以防其他人遇到相同的问题。

3个回答

33

我启用了“请求失败跟踪”,在搜索(庞大的)日志后,我发现了以下内容:

 <EventData>
  <Data Name="ContextId">{00000000-0000-0000-3700-0080010000FC}</Data>
  <Data Name="ModuleName">CustomErrorModule</Data>
  <Data Name="Notification">536870912</Data>
  <Data Name="HttpStatus">500</Data>
  <Data Name="HttpReason">Internal Server Error</Data>
  <Data Name="HttpSubStatus">19</Data>
  <Data Name="ErrorCode">2147942583</Data>
  <Data Name="ConfigExceptionInfo">
    \\?\C:\Websites\xxx\www\web.config ( 58) :Cannot add duplicate collection 
    entry of type &apos;mimeMap&apos; with unique key attribute 
    &apos;fileExtension&apos; set to &apos;.woff&apos;
  </Data>
 </EventData>

发生的情况是,网站明确添加了一种用于提供Web字体(.woff)的新Mime类型。

后来,新的Mime类型(.woff)也被添加到全局IIS Mime类型中。

网站设置没有覆盖全局设置,反而抛出了异常。


1
我还没有测试过,但如果尝试覆盖web.config中的其他设置而不是全局设置,我不会感到惊讶也会导致这种情况。 - nrkn
3
非常好的问题,感谢您的发布。我们正在开发服务器上进行工作,客户购买了使用GoDaddy托管的主机。在部署网站后,对于任何请求静态内容(CSS、图片等),我们都会收到500错误代码。我们添加了一个静态内容mime映射来将.SVG映射到image/svg+xml,因为IIS默认没有这个映射。您的答案正是我所需要的,我们从web.config中删除了静态内容映射,重新上传,这解决了问题。 - Nick Bork
2
我也被WOFF搞糊涂了!完全一样的事情...干杯,让我彻底困惑了。 - TobyEvans
确切的问题!节省了我数小时的研究时间! - Gonzalo Gallotti
1
对我来说是.json文件。感谢节省时间! - ianbeks
显示剩余3条评论

14

始终删除您想要添加的任何MIME类型,以防它已在IIS/服务器级别上定义,例如:

<staticContent>
  <remove fileExtension=".otf" />
  <mimeMap fileExtension=".otf" mimeType="application/x-font-otf" />
</staticContent>

在Windows 10中持续测试WebApp时,由于这行代码(在Windows 8.1之前是必需的),会不断出现500内部服务器错误。首先添加删除标签使其在两个环境中都能正常工作。 - Meoiswa

3
最终解决了在godaddy.com共享托管上部署MVC 3.0应用程序时出现的500内部服务器错误。

某种程度上,引用的DLL版本与web.config中提到的版本存在差异。

尝试了各种论坛中提到的所有选项,没有什么帮助,尽管每个人都建议使用相同类型的修复方法,但在我的情况下不起作用。最终,在我的头疼了两天之后, 我决定删除项目中的所有dll引用和删除web.cofig(制作本地副本),让应用程序抛出错误,然后进行一次添加一个dll并将其复制到local=true本地副本的操作。 添加完所有的dll之后。我创建了一个新的asp.net mvc应用程序并将新应用程序的web.config复制到我的实际应用程序中。 所以我的实际应用程序现在有了一个新的web.config,然后我从保存的web.config的本地副本中复制了连接字符串和其他引用。

只需编译该应用程序并发布到本地文件夹中,并将发布的文件夹FTP到goDaddy即可。

它可以工作,最终我的问题得到了解决。

希望这将有助于其他人,使他们不会像我一样浪费两天时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接