Tôi muốn sử dụng G-ZIP trên trang web của tôi, tôi googled đoạn mã sau:ASP.NET MVC - Response.Filter là null khi sử dụng ActionFilterAttribute trong RegisterGlobalFilters()
public class CompressAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var acceptEncoding = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
if (!string.IsNullOrEmpty(acceptEncoding))
{
acceptEncoding = acceptEncoding.ToLower();
var 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);
}
}
}
}
Nó hoạt động tốt khi tôi đặt thuộc tính cho Controller hoặc Action.
[Compress]
public class PostController : Controller
Tôi không muốn manully làm điều này trên mỗi đoạn mã, vì vậy tôi đã đăng ký thuộc tính này trong
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new CompressAttribute());
}
Nhưng khi tôi chạy các ứng dụng, ngoại trừ được tung vào dòng mã này:
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
phản hồi.Filter is null.
Tôi muốn biết tại sao điều này xảy ra và cách giải quyết vấn đề này. Cảm ơn!
- Cập nhật:
tôi thấy rằng ngoại trừ chỉ xảy ra khi bộ điều khiển chứa một hành động trẻ em, và nó được gọi.