Tengo un atributo personalizado llamado CompressAttribute que se configura como un filtro global en global.asax. Utiliza la reflexión para examinar el tipo de retorno del método de acción actual y, si es "ViewResult", comprime la salida usando GZip o Deflate. Funciona muy bien, excepto si una página arroja un error de 500 Server. Si se encuentra un error, en lugar de mostrar la página de error de .NET, obtengo un montón de esto:Filtro de compresión MVC 3 que causa una salida confusa
`I % &/m {J J t
Al parecer, está intentando codificar la página 500 Server Error que está causando problemas. ¿Cuál es la mejor manera de manejar esto?
Aquí está el código del filtro:
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);
}
}
usted podría intentar crear una página personalizada de error? –
Eso realmente no resolvería el problema. Necesito poder ver información de excepción, información de rastreo de pila, etc. durante la depuración. – Scott
Eso no significa que no puedas hacer eso usando el atributo 'HandleError'. –