मैं एक कस्टम HttpHandler जिसमें मैं मैन्युअल रूप से उत्पादन संपीड़न सक्षम इसलिए की तरह है, तो गायब हो जाता है:"सामग्री एन्कोडिंग" शीर्षक HttpHandler प्रतिक्रिया से एक अपवाद तब होता है
context.Response.AppendHeader("Content-encoding", "gzip");
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
यह सबसे अनुरोध के लिए अच्छी तरह से काम करता है, लेकिन जब एक अपवाद का सामना "सामग्री-एन्कोडिंग" हेडर प्रतिक्रिया से गायब हो जाता है, जबकि संपीड़न फ़िल्टर जगह में रहता है। नतीजा यह है कि त्रुटि पृष्ठ gzip संपीड़ित है, लेकिन ब्राउज़र को उस तथ्य को इंगित करने वाला कोई हेडर प्राप्त नहीं होता है। ब्राउज़र फिर भी संकुचित डेटा को पाठ के रूप में प्रदर्शित करने का प्रयास करता है, जो gobbledygook है।
पूर्ण परीक्षण केस कोड नीचे दिखाया गया है। संपीड़न को वैकल्पिक रूप से अक्षम करने या अपवाद फेंकने का प्रयास करें।
क्या कोई भी "सामग्री-एन्कोडिंग" हेडर गायब होने पर कुछ प्रकाश डाल सकता है?
मुझे लगता है कि मैं पिछले हैंडलर की चीज के रूप में संपीड़न को सक्षम कर सकता हूं, ताकि यदि कोई अपवाद सामने आया तो यह उस बिंदु तक नहीं पहुंचता जहां संपीड़न फ़िल्टर जोड़ा जाता है; लेकिन जो व्यवहार मैं देख रहा हूं वह मुझे एक बग के रूप में मारता है। क्या कोई पुष्टि कर सकता है?
public class TestHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
CompressResponse(context);
context.Response.Write("Hello world");
// Throw an exception for testing purposes
throw new Exception("Just testing...");
}
private void CompressResponse(HttpContext context)
{
string acceptEncoding = context.Request.Headers["Accept-Encoding"];
if (String.IsNullOrEmpty(acceptEncoding))
{
return;
}
// gzip or wildcard
if (acceptEncoding.ToLower().Contains("gzip") || acceptEncoding.Contains("*"))
{
context.Response.AppendHeader("Content-encoding", "gzip");
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
return;
}
// Also handles deflate (not shown here)
// <snip>
}
public bool IsReusable
{
get { return true; }
}
}
संपादित करें: अभी भी एन्कोड प्रतिक्रिया का स्क्रीनशॉट मैं अपने परीक्षण मामले के साथ दिखाई दे रही है: http://i.imgur.com/49Vcl.png
तो यदि आप मेरे कोड को निष्पादित करते हैं, तो आपको अभी भी संपीड़ित gobbledygook की बजाय उचित पीले-स्क्रीन-मौत मिलती है? –
हां, जैसा कि है, मैं प्रतिलिपि/पेस्ट बना देता हूं और मुझे उचित पीले रंग की स्क्रीन मिलती है। समस्या तब प्रकट होती है जब मैं फ्लश करता हूं() !!!!!!!! क्या आप त्रुटि से पहले कहीं फ्लश करते हैं? Gzip प्रकट नहीं होता है, लेकिन फ़िल्टर भी सेट नहीं है। – Aristos
शायद कहीं और आपने कस्टम त्रुटि सेट की है? – Aristos