'GZipStream and DeflateStream in .Net Core

I'm currently migrating an ASP.NET MVC project to ASP.NET Core 3.1. I need to have same functionality in .Net core as well. But now I'm not able to use these methods. It gives error under CompressionMode.Compress like

cannot convert from 'System.IO.Compression.CompressionMode' to 'System.IO.compression.compressionLevel

Also, I need to use response.Filter along with that, which also showing this error:

HttpResponse does not contain definition for Filter.

I have placed below code inside a OnResultExecuting() method of a class that derives ActionFilterAttribute.

string acceptEncoding = request.Headers["Accept-Encoding"];
//HttpResponseBase response = filterContext.HttpContext.Response;
HttpResponse response = filterContext.HttpContext.Response;
if (acceptEncoding.Contains("GZIP"))
{   
    //..
    response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
}
else if (acceptEncoding.Contains("DEFLATE"))
{
    //..
    response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
}

Is it possible to do in this class itself? Else is there any other methos to achieve this?

I moved the code to result filter like below:

namespace HTTPCompression.ActionFilters
{
public class CompressAttribute : ActionFilterAttribute, IResultFilter
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        //HttpRequestBase request = filterContext.HttpContext.Request;
        HttpRequest request = filterContext.HttpContext.Request;

        string acceptEncoding = request.Headers["Accept-Encoding"];            
        acceptEncoding = acceptEncoding.ToUpperInvariant();

        //HttpResponseBase response = filterContext.HttpContext.Response;
        HttpResponse response = filterContext.HttpContext.Response;

        if (acceptEncoding.Contains("GZIP"))
        {             
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
        else if (acceptEncoding.Contains("DEFLATE"))
        {                
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
    }

    public override void OnResultExecuted(ResultExecutedContext context)
    {
        // Do something after the result executes.
    }
}
}

Still having same issue as mentioned above.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source