Asp.net 异常中断响应压缩

Asp.net 异常中断响应压缩,asp.net,ajax,gzip,response,Asp.net,Ajax,Gzip,Response,我编写了一个IHttpModule,它使用gzip压缩我的响应,并返回大量数据。以减小响应大小。只要web服务不抛出异常,它就工作得很好。在抛出异常的情况下,异常被gzip处理,但内容编码头消失,客户端不知道如何读取异常 为什么标题不见了?我需要在客户端中获取异常 以下是模块: public class JsonCompressionModule : IHttpModule { public JsonCompressionModule() { } public

我编写了一个IHttpModule,它使用gzip压缩我的响应,并返回大量数据。以减小响应大小。只要web服务不抛出异常,它就工作得很好。在抛出异常的情况下,异常被gzip处理,但内容编码头消失,客户端不知道如何读取异常

为什么标题不见了?我需要在客户端中获取异常

以下是模块:

public class JsonCompressionModule : IHttpModule
{
    public JsonCompressionModule()
    {
    }

    public void Dispose()
    {
    }

    public void Init(HttpApplication app)
    {
        app.BeginRequest += new EventHandler(Compress);
    }

    private void Compress(object sender, EventArgs e)
    {
        HttpApplication app = (HttpApplication)sender;
        HttpRequest request = app.Request;
        HttpResponse response = app.Response;
        try
        {
            //Ajax Web Service request is always starts with application/json
            if (request.ContentType.ToLower(CultureInfo.InvariantCulture).StartsWith("application/json"))
            {
                //User may be using an older version of IE which does not support compression, so skip those
                if (!((request.Browser.IsBrowser("IE")) && (request.Browser.MajorVersion <= 6)))
                {
                    string acceptEncoding = request.Headers["Accept-Encoding"];

                    if (!string.IsNullOrEmpty(acceptEncoding))
                    {
                        acceptEncoding = acceptEncoding.ToLower(CultureInfo.InvariantCulture);

                        if (acceptEncoding.Contains("gzip"))
                        {
                            response.AddHeader("Content-encoding", "gzip");
                            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
                        }
                        else if (acceptEncoding.Contains("deflate"))
                        {
                            response.AddHeader("Content-encoding", "deflate");
                            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            int i = 4;
        }
    }
}

您应该尝试在事件处理程序中或事件处理程序中处理异常。 我不知道头会发生什么情况,但您可能可以在应用程序中通过除以零来模拟和调试压缩方法


在ASP.NET中检查有关全局异常处理的信息

您应该尝试在事件处理程序中或事件处理程序中处理异常。 我不知道头会发生什么情况,但您可能可以在应用程序中通过除以零来模拟和调试压缩方法


检查此关于ASP.NET中全局异常处理的信息

如果我的Web服务引发异常,我希望客户端在错误回调下获得此异常。如果出现异常,我不想将结果视为成功。那么,为什么不以自己的方式处理异常,然后重新显示它呢?这正是我想说的,但我是在特定的web服务中这样做的,而不是在page_错误事件下。我想,您的问题是由于asp.net的深层次出现了未修补的异常,尝试在application_error global.asax中捕获它,然后您就可以了解发生了什么。如果我的Web服务抛出异常,我希望客户机在错误回调下获得该异常,那么我不能告诉您更多信息,除非查看代码并对其进行调试。如果出现异常,我不想将结果视为成功。那么,为什么不以自己的方式处理异常,然后重新显示它呢?这正是我想说的,但我是在特定的web服务中这样做的,而不是在page_错误事件下。我想,您的问题是由于asp.net的深层次出现了未修补的异常,尝试在application_error global.asax中捕获它,然后您就可以了解发生了什么。我不能告诉你更多,除非看一下代码并排除错误。请帮忙?你不必提及这一点,因为这是本网站的实际目的。这种情况仍然存在。叹气显然,这是因为在处理错误时,。请帮助?你不必提及这一点,因为这是本网站的实际目的。这种情况仍然存在。叹气显然,这是因为在处理错误时。
[WebMethod]
public void DoSomething()
{
    throw new Exception("This message get currupted on the client because the client doesn't know it gzipped.");
}