나는 나의 MVC의 행동에 대한 압축 필터를 사용하여 봤는데 :압축 필터는
http://msdn.microsoft.com/en-us/magazine/gg232768.aspx
나는 다시 목적을 위해 웹 API에 대한 비슷한 일을 할 수있는 코드를 시도했습니다 그러나 나는 방책을 쳤다 :
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;
}
응답의 내용에 압축 된 스트림을 어떻게 할당 할 수 있습니까?
나는 제어 할 수없는 IIS 6.0에서이 호스트가 호스팅되고 있음을 지적해야합니다.
'DelegatingHandler'되어 편집
(모두 JSON 포맷을 커버 위 이외에 "문자셋 = UTF-8 응용 프로그램/JSON"를 포함) 해결책을 설명하는 답변이 이미 있습니다. http://stackoverflow.com/questions/10443588/mvc4-webapi-compress-get-method-response – tpeczek
필터를 사용하면 특정 webapi 작업 만 지정할 수 있습니다. DelegatingHandler가 모든 작업을 압축하도록 강요합니까? –