1

我一直在使用我在网上找到的压缩属性,这对我们来说效果很好。

  public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpRequestBase request = filterContext.HttpContext.Request;

        string acceptEncoding = request.Headers["Accept-Encoding"];

        if (string.IsNullOrEmpty(acceptEncoding)) return;

        acceptEncoding = acceptEncoding.ToUpperInvariant();

        HttpResponseBase response = filterContext.HttpContext.Response;

        if (acceptEncoding.Contains("GZIP"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
        else if (acceptEncoding.Contains("DEFLATE"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
    }

我遇到的问题是,当抛出异常时,屏幕会显示压缩内容(我认为!)..它看起来像这样..

xi��V�4��^ :b���$I"i#!c{��`$c��'wy�N�������H:��38�YS�b?ߕ�!`WSϙ��萧̬n��H����:V(ylZ� �ωԱ��Ϟӱ=�囥�ֺ���V��/>�^R���$٣����T�����J�oRݬz���?6$�<��KՔ��B0�x��V$�����F�h+Ǐ���!���0J��ɒ�h��+VR�p�ۊ�������!��-cccs�Z�%��2{�Ѿ��r�����۩/�,�n��n�f���tܳu�}����.+t��]���̆�����,�c��-�H0)J������dP�� ��   ��/�|��#�Z�]O

我的问题是,是否有可能以某种方式解决这个问题?有什么方法可以让这个动作在异常情况下很好地工作?

4

1 回答 1

1

您可以删除压缩过滤器Application_Error

protected void Application_Error(object sender, EventArgs e)
{
  (sender as HttpApplication).Response.Filter = null;
}

或者,您可以尝试Content-Encoding适当地更新响应标头,但我没有尝试过,所以不确定它是否会起作用。

于 2013-11-08T09:22:52.487 回答