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