Ich habe für meine MVC Aktionen des Kompressionsfilter verwendet wie hier beschrieben:Compression Filter für Web-API
http://msdn.microsoft.com/en-us/magazine/gg232768.aspx
Ich habe versucht, den Code neu zu Zweck etwas ähnliches für Web-API zu tun , aber ich habe einen Roadblock getroffen:
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;
}
Irgendwelche Ideen, wie ich dem Inhalt der Antwort einen komprimierten Stream zuweisen kann?
Ich sollte darauf hinweisen, dass dies in IIS 6.0 gehostet wird, die ich nicht kontrolliere.
In ASP.NET Web API viel besserer Ansatz ist 'DelegatingHandler' und es gibt bereits eine Antwort, die die Lösung beschreibt http://stackoverflow.com/questions/10443588/mvc4-webapi-compress-get-method-response – tpeczek
Ein Filter ermöglicht es Ihnen, nur bestimmte Webapi-Aktionen angeben ... nicht ein DelegatingHandler zwingt Sie, alle Aktionen zu komprimieren? –