Когда я использую фильтр сжатия и получаю сообщение об ошибке, страница с ошибкой - это просто тарабарские символы. Проблема заключается в том, что при переходе IIS на страницу с ошибкой фильтр сжатия по-прежнему действует, но заголовки очищаются. Без заголовка "Content-encoding: gzip" браузер просто отображает необработанные двоичные данные gzipped.
Я использую IIS7.5, ASP.NET MVC 2 Preview 2 и ActionFilter, который выглядит следующим образом:
public class CompressResponseAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var request = filterContext.HttpContext.Request;
var response = filterContext.HttpContext.Response;
var acceptEncoding = request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(acceptEncoding))
return;
acceptEncoding = acceptEncoding.ToLowerInvariant();
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);
}
}
}
Кто-нибудь еще испытал это?