Tôi đã sử dụng bộ lọc nén cho hành động MVC của tôi như là chi tiết tại đây:nén lọc cho Web API
http://msdn.microsoft.com/en-us/magazine/gg232768.aspx
Tôi đã cố gắng để tái khẳng định các mã để làm điều gì đó tương tự cho Web API , nhưng tôi đã đạt được rào cản:
public class CompressAPIAttribute : System.Web.Http.Filters.ActionFilterAttribute
{
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext filterContext)
{
var preferredEncoding = GetPreferredEncoding(filterContext.Request);
Stream compressedStream = null;
// Compress the response accordingly
var response = filterContext.Response;
response.Headers.Add("Content-encoding", preferredEncoding.ToString());
if (preferredEncoding == CompressionScheme.Gzip)
{
response.Content = new GZipStream(compressedStream, CompressionMode.Compress); //THIS WON'T WORK
}
if (preferredEncoding == CompressionScheme.Deflate)
{
response.Content = new DeflateStream(compressedStream, CompressionMode.Compress); //THIS WON'T WORK
}
return;
}
enum CompressionScheme
{
Gzip = 0,
Deflate = 1,
Identity = 2
}
private CompressionScheme GetPreferredEncoding(HttpRequestMessage request)
{
var acceptableEncoding = request.Headers.AcceptEncoding;
if (acceptableEncoding.Where(h => h.Value.Contains("gzip")).Count() > 0)
return CompressionScheme.Gzip;
if (acceptableEncoding.Where(h => h.Value.Contains("deflate")).Count() > 0)
return CompressionScheme.Deflate;
return CompressionScheme.Identity;
}
Bất kỳ ý tưởng nào tôi có thể gán luồng nén cho nội dung phản hồi?
Tôi nên chỉ ra điều này đang được lưu trữ trong IIS 6.0, mà tôi không kiểm soát.
Trong ASP.NET Web API tiếp cận tốt hơn nhiều là 'DelegatingHandler' và đã có câu trả lời mô tả giải pháp http://stackoverflow.com/questions/10443588/mvc4-webapi-compress-get-method-response – tpeczek
Bộ lọc cho phép bạn chỉ định một số hành động webapi nhất định ... không phải là DelegatingHandler buộc bạn phải nén tất cả các hành động? –