2010-10-18 54 views
19

因为我上载的ASP.NET MVC应用程序1到服务器的更新版本中,Yellow Screen of Death已更改为这样的事情:ASP.NET MVC:在错误页面奇怪的字符

I�%&/m�{J�J��t�� $ @ IG#)* EVE F的@흼{{; N'\fdlJɞ〜|?!? “ Ey ')= y6 h ͼhR L w | 2= Ez< 7 :5 < + oy ��:� �T����W�v�<[��~2�g�2��?�ʋ�y�hYՋ������t� _N���M�l�����{�,��Xn���Q�}�����*g�������7�� ~� j'u>K { IW4 > U w | = -fYzR-

当访问页面时h通过远程桌面(Windows Server 2008 R2,IE8)直接在服务器上发生错误,IE甚至会尝试下载响应,但会出现错误(消息框)。

有人遇到过这个吗?任何想法如何解决这个问题?

我也发现了这个问题,这似乎是很simliar,但遗憾的是并没有被现在回答:ASP.NET MVC app displaying weird characters

+0

您可以使用Fiddler或Firebug来查看响应吗?另外,检查事件日志; .NET应该在那里报告错误。 – mkchandler 2010-10-18 20:41:39

+0

Fiddler显示与浏览器相同的响应。该错误是一个简单的“例外”。在这种情况下,我故意抛出它,但我得到了与其他异常类型相同的结果。 – davehauser 2010-10-18 22:39:58

+0

您是否有任何可能会更改编码的文化或文本编码类型集?或在标题中使用非文本MIME类型?在您的Web服务器,web.config或控制器(或任何操作/授权过滤器)中设置?什么是HTTP响应的完整标题? – 2011-02-21 16:56:31

回答

29

最有可能你正在展示由gzip编码在你的代码引起的画面。您可能正在将Response.Filter应用于GZip/DeflateStream类,并打算对您的内容进行编码,但会发生错误,并且ASP.NET会清除您的标题,但保留过滤器的完整性。结果是,您的内容是GZip编码的,但浏览器不会对其进行解码,因为Content-Encoding标头未设置。

要解决此插件:

Response.Filter = null 

到您的Application_Error日常顶部,迫使任何Repsonse过滤器来清除。

另一件可以让你感到困扰的事情就是GZipped内容的OutputCaching。如果应用了任何OutputCaching,请确保您有VaryByCustom选项以允许使用不同的编码类型(无,Gzip,Deflate最有可能)。

+++ Rick ---

+0

太棒了!太感谢了! – vtortola 2012-02-21 12:51:25

+2

当我发现这个答案时,我不相信它,当我看到这个答案时,我认为这是游戏结束 - 我从来没有很高兴看到YSOD。 – 2012-09-07 19:02:35

+0

垃圾。好的答案,但我得到这个确切的问题,它不是GZip相关。 – 2013-09-11 21:41:30