11
當我使用壓縮過濾器並收到錯誤時,錯誤頁面只是亂碼字符。問題似乎是,當IIS轉移到錯誤頁面時,壓縮過濾器仍然有效,但標頭被清除。如果沒有「Content-encoding:gzip」頭文件,瀏覽器會顯示原始的壓縮二進制數據。使用壓縮ActionFilter時,服務器錯誤消息會清除內容編碼標題並呈現爲亂碼
我使用的是IIS7.5,ASP.NET MVC 2預覽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);
}
}
}
任何人都經歷過這樣?
不妨將這個標記爲你的答案,因爲它的工作原理...... :) – 2012-03-07 06:39:03
這讓我感到沮喪幾個月,但我讓ELMAH看到真正的錯誤而不是亂碼,很高興最終得到修復: ) – 2013-03-12 20:13:31