Cha*_*ell 7 asp.net asp.net-mvc asp.net-mvc-2
每当我运行我的应用程序时,我会在输出中找到真正"非常"奇怪的字符而不是相应的页面.现在我知道这是因为一些错误,但不幸的是错误并没有表现出它的自我,而只是产生奇怪的字符.
这是一个完整页面源代码的示例.
I?%&/m?{J?J??t??
$ @ iG#) eVe ] f @ 흼 { { ; N' ?\fdl J ɞ〜|!?"安永')=y6hurjfŲIU<[2O 2_ ]i ߴ 肴] l g ~ O ,[f Wyq1o- z QS iUV I M ԃ z > EV_ Z=J T f Z gi r k ܷ ZPW4 ,KO eS y// m^ + EeB c j w , Vu Q $ n:@] uC_ X_E ^ DTM [ - ; wvVrMJYyuYP佑2uCw } V | WID\0>米ւH%YI)XdjUSzx ^ WŬvϚ$ G ^ Oqq {0.0 = 8fy6 .R〜;〔 BT〜/ Kz的|-Wź Q&4BQ4oux |wrtLKо$)Ms.4-ٺ1,4]>]˷7 !4IZcM; N_ye_q%L CPE9ejJ [^ fe1r֏p߯ uM 3 =B È ,H Y sz S̨ T ? } k p l _d ̼/ S [V"p} ^ JPQ!Z?<5???j??Wd?wc?O??0 ???O/??h?jv??a?????}?J??y??E???zA?h@??45e?e?4???e?u??v???N????C?b???zE??!???UY??X?s?l???#???}???m????/??u ?I????O??2[Lf????y5?:)?fM????(?Q???}??)!???????d???t|< ?
PO $ ꀜ ?=6 < ?/ q> b 7 ^ (= {Z Y} u =8 u J D c vt O / 1ev} RfM3 /〜 h ϊ - } : a\ lZ <[/ Rv 5K(F C b {;? { {; ?{^4-R | > [6 : ps FA ' 7 ehU + R > 0{ ܍ FI; w œ 2JӼi r > po?j2 ] m U1{J /中,Cp ^ WJM $ 0 ^ 7D:NVD + T9C-X .ٹWW〜3A9vۮ-M/=> R |wǽyY8? { N # 7 ' /+ ͋UIJa fy v x ] x}?〜 1s u ! p ] 4 / i]5 y I A ^U T_{ ? 9 0=〜 e " p我ضNRK [Z {#. s @# M8|G C Y Q7z m/z (>> 9Տ7:EG N g7? = -19irz7vi4x76v> zv0〜3zn8 ]/H\ w q ? 9 k~3} 3 7 G: ߤ 〜 n q } ÿ Ō#6)2\LMS p 1\@ Vi3Rr'UcPDfhat :
我从未在Web表单中看到过这种情况.
所以我今天做了一些测试,发现了一些有趣的东西.首先,应用程序抛出了Null Reference Exception(500).其次,本地调试器看到错误并立即投下黄色的死亡屏幕.坏文本显示在当前运行Release版本的Staging服务器上.
因此,在我的登台服务器上关闭了customErrors的Release版本基本上500个错误会抛出CrAzY字符而不是优雅地失败到黄色死亡屏幕.
根据@ Esteban的回答,这是我的压缩过滤器
Namespace Filters
Public Class CompressFilter : Inherits ActionFilterAttribute
''' <summary>
''' GZip compresses each Action when loaded. This satisfies YSlow and
''' PageSpeed.
''' </summary>
''' <param name="filterContext">The filter context.</param>
Public Overrides Sub OnActionExecuting(ByVal filterContext As ActionExecutingContext)
Dim request As HttpRequestBase = filterContext.HttpContext.Request
Dim acceptEncoding As String = request.Headers("Accept-Encoding")
If String.IsNullOrEmpty(acceptEncoding) Then
Return
End If
acceptEncoding = acceptEncoding.ToUpperInvariant()
Dim response As HttpResponseBase = filterContext.HttpContext.Response
If acceptEncoding.Contains("GZIP") Then
response.AppendHeader("Content-encoding", "gzip")
response.Filter = New GZipStream(response.Filter, CompressionMode.Compress)
ElseIf acceptEncoding.Contains("DEFLATE") Then
response.AppendHeader("Content-encoding", "deflate")
response.Filter = New DeflateStream(response.Filter, CompressionMode.Compress)
End If
End Sub
End Class
End Namespace
Run Code Online (Sandbox Code Playgroud)
我通过基本控制器在每个控制器上全局设置此过滤器.如果没有其他500个错误,页面运行正常,但如果我有500错误偷看它是丑陋的头,我得到了时髦的角色.
此外,有时我的开发服务器上没有错误,但Staging服务器上有一个错误.最近,当我在登台服务器上没有更新的库时发生了这种情况,但它存在于我的Dev机器上.我可以在事件日志中看到错误,但我无法在网页上看到它......即使我将自定义错误设置为Off
.
好的,现在我们发现这个错误是因为<CompressionFilter()>
如果抛出500错误我没有解压缩流.无论如何都要弄清楚如何解压缩我的输出.
这就是我为解决这个问题所做的事情。我仍在努力寻找更好的方法。将以下代码放入global.asax.cs中
Run Code Online (Sandbox Code Playgroud)protected void Application_PreSendRequestHeaders() { HttpResponse response = HttpContext.Current.Response; if (response.Filter is GZipStream && response.Headers["Content-encoding"] != "gzip") response.AppendHeader("Content-encoding", "gzip"); else if (response.Filter is DeflateStream && response.Headers["Content-encoding"] != "deflate") response.AppendHeader("Content-encoding", "deflate"); }
更新 请查看以下链接以获取更多信息,其中 Rick 使用以下内容来解决问题。将以下内容放入您的 global.asax.cs 中
protected void Application_Error(object sender, EventArgs e)
{
// Remove any special filtering especially GZip filtering
Response.Filter = null;
}
Run Code Online (Sandbox Code Playgroud)
http://www.west-wind.com/weblog/posts/2011/May/02/ASPNET-GZip-Encoding-Caveats
归档时间: |
|
查看次数: |
702 次 |
最近记录: |