7 Stimmen

ASP.NET MVC2 CrAzY-Zeichen in der Ansichtsausgabe - WTF

Hin und wieder, wenn ich meine Anwendung ausführe, erhalte ich wirklich "WIRKLICH" seltsame Zeichen in meiner Ausgabe anstelle der entsprechenden Seite. Jetzt weiß ich, dass dies aufgrund eines Fehlers ist, aber leider der Fehler nicht präsentieren es ist selbst, sondern produziert nur seltsame Zeichen.

Hier ist ein Beispiel für einen vollständigen Seitenquelltext.

I%&/m{JJt $@iG#) eVe]f@{{;N'? \fdlJ !?~|? "Ey')=y6hurjfIU<[2O2_]i]lg~O,[fWyq1o-zQS iUVIMz>EV_Z=JTfZgirk ZPW4,KOeSy/m^+E eBc jw,VuQ$n:@]uC_X_E^dTm[-;wvVrMJYyuYP2uCw}V|WId \0 >mh%yi)XdjUSzx^Wv$G^Oqq{.0=8fy6?.r~;[Bt~/Kz|-WQ&4BQ4oux|wrtLK$)Ms.4-.4]>]7!4IZcM;N_ye_q%LCPE9ejJ[^fe1rpuM3=BÈ,HYszST?} kpl_d/S[V "p}Jpq^! Z<5jWdwcO0 O/hjva}JyEzAh@45ee4?euvNCbzE!UYXsl#?}m/u IO2[Lfy5:)fM(Q})!dt|< PO$?=< ?/q>b7^ (={ZY}u=8uJDcvtO/ 1ev}RfM3/~h -}:a \lZ <[/Rv5K(FCb{;?{{;?{^4- R|>[6:psFA7ehU+R>0{FI;wœ2Jir>po?j2 ]mU1{J/,Cp^Wjm$0^7d:nVd+t9c-x.Ww~3A9v-M/=>R|wyY?8{N #7 '/+UIJafyvx]x}?~1su !p] 4/i]5y IA^UT_{?0=~e "pinrk[z{#.s@#M8| GCYQ7zm/z(>>97:EGNg7?=-19irz7vi4x76v>zv0~3zn8]/H\ wq?9k~3}37G:~nq}y #6)2 \lMs p^\@Vi3Rr'UcPDfhat:DcE88UH7j*_Tm4U]|yYe 7'NJl,

Das habe ich bei Webformularen noch nie erlebt.

EDIT:

Ich habe heute einige Tests durchgeführt und dabei einige interessante Dinge gefunden. Erstens warf die App eine Null Reference Exception (500). Zweitens sah der lokale Debugger den Fehler und warf sofort einen gelben Bildschirm des Todes aus. Der fehlerhafte Text wurde auf dem Staging-Server angezeigt, auf dem derzeit ein Release-Build läuft.

Also im Grunde 500 Fehler auf Release-Builds mit customErrors aus auf meinem Staging-Server wirft CrAzY-Zeichen statt anmutig auf den gelben Bildschirm des Todes fehlschlagen.

EDIT 2:

Wie in der Antwort von @Esteban beschrieben, ist hier mein Kompressionsfilter

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

Ich setze diesen Filter global auf jeden Controller über einen Base Controller. Die Seite läuft ganz gut, wenn es keine anderen 500 Fehler, aber wenn ich einen 500-Fehler-Peek es ist hässlich Kopf, ich bekomme die funky Zeichen.

Außerdem habe ich manchmal keinen Fehler auf meinem Entwicklungsserver, aber auf dem Staging-Server tritt ein Fehler auf. Dies geschah vor kurzem, als ich die aktualisierte Bibliothek nicht auf dem Staging-Server hatte, sie aber auf meinem Entwicklungsrechner vorhanden war. Ich kann die Fehler im Ereignisprotokoll sehen, aber ich kann sie nicht auf der Webseite sehen... selbst wenn ich Custom Errors auf Off .

EDIT 3:

Ok, jetzt haben wir herausgefunden, dass dieser Fehler kommt, weil meine <CompressionFilter()> dekomprimiert den Stream nicht, wenn ein 500-Fehler ausgegeben wird. Ich muss herausfinden, wie ich meine Ausgabe dekomprimieren kann, egal was passiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X