c# - MVC 3压缩过滤器导致乱码输出

标签 c# asp.net-mvc action-filter

因此,我有一个名为 CompressAttribute 的自定义属性,它在 global.asax 中设置为全局过滤器。它使用反射来检查当前操作方法的返回类型,如果它是“ViewResult”,它使用 GZip 或 Deflate 压缩输出。它工作得很好,除非页面抛出 500 服务器错误。如果遇到错误,我不会显示 .NET 错误页面,而是会得到一堆这样的信息:

��������`I��%&/m��{J��J������

显然它正在尝试对导致问题的 500 服务器错误页面进行编码。处理此问题的最佳方法是什么?

过滤代码如下:

public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            MethodInfo actionMethodInfo = Common.GetActionMethodInfo(filterContext);
            if (GetReturnType(actionMethodInfo).ToLower() != "viewresult") return;

            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 WebCompressionStream(response.Filter, CompressionType.GZip);
            }
            else if (acceptEncoding.Contains("DEFLATE"))
            {
                response.AppendHeader("Content-encoding", "deflate");
                response.Filter = new WebCompressionStream(response.Filter, CompressionType.Deflate);
            }
        }

最佳答案

好的,所以我能够通过清除 Application_Error 事件中的 Response.Filter 属性来解决此问题:

public void Application_Error(object sender, EventArgs e)
{
    Response.Filter.Dispose();
}

想知道是否有更正确的方法...

关于c# - MVC 3压缩过滤器导致乱码输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4548221/

相关文章:

asp.net - 防止在 Elmah 操作上应用 ASP.NET MVC 全局过滤器

c# - 如何在 C# 中创建索引从 1 开始的一维数组

c# - ASP.NET MVC : How to create an action filter to output JSON?

c# - DelegatingHandler 适用于本地主机,但不适用于 Azure

.net - 输入键触发错误的提交按钮

c# - 按搜索字符串中的每个单词搜索名称

javascript - Mdbootstrap V5 输入边框在 AngularJS 页面(布局除外)中使用时不出现

c# - .NET 中的字符串比较

c# - 针对部署到多个环境的 Web 应用程序的 VS Application Insights