मैं के रूप में यहाँ विस्तृत मेरी MVC कार्यों के लिए संपीड़न फिल्टर का उपयोग कर रहा हूँ:संपीड़न फिल्टर
http://msdn.microsoft.com/en-us/magazine/gg232768.aspx
मैं फिर से इस प्रयोजन के लिए वेब एपीआई के लिए इसी तरह कुछ करने के लिए कोड की कोशिश की है , लेकिन मैंने एक रोडब्लॉक मारा है:
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;
}
कोई विचार मैं प्रतिक्रिया की सामग्री में संपीड़ित स्ट्रीम कैसे निर्दिष्ट कर सकता हूं?
मुझे यह इंगित करना चाहिए कि यह आईआईएस 6.0 में होस्ट किया जा रहा है, जिसे मैं नियंत्रित नहीं करता हूं।
ASP.NET वेब एपीआई काफी बेहतर दृष्टिकोण में 'DelegatingHandler' है और समाधान का वर्णन करने वाला एक उत्तर पहले से ही है http://stackoverflow.com/questions/10443588/mvc4-webapi-compress-get-method-response – tpeczek
एक फ़िल्टर आपको केवल कुछ वेबपी क्रियाओं को निर्दिष्ट करने की अनुमति देता है ... कोई नहीं प्रतिनिधिमंडल आपको सभी कार्यों को संपीड़ित करने के लिए मजबूर करता है? –