简体   繁体   中英

Compress the response of service stack

I tried to compress the response of service stack using global filters but it not work throws 500 err code. here are my code

this.GlobalResponseFilters.Add((req, response, requestDto) =>
            {
                response.AddHeader("Content-Encoding", "gzip");
                MemoryStream stream = new MemoryStream();
                IFormatter formatter = new BinaryFormatter();
                formatter.Serialize(stream, requestDto);
                var data = new GZipStream(stream, CompressionMode.Compress);
                response.WriteToResponse(response, "application/json");
}

Here i tried [CompressResponse] attribute also

MvcController

httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = httpClient.GetAsync(url).Result;

ServiceStack.ServiceInterface

public interface ICommonDAL
{
 Task<string> Getdefaultvalue(Getvalue request);
 }

[CompressResponse]

public class CommonDAL: DBConnection, ICommonDAL {

    public async Task<string> Getdefaultvalue(Getvalue request)
    {
        return await WithConnection(async c =>
        {
            var p = new DynamicParameters();
            p.Add("@pID", request.ID);
            p.Add("@pMode", request.Mode);
            var res= await c.QuerySingleAsync<string>("[dbo].[spdemo]", p, commandType: CommandType.StoredProcedure);
            return res
        });
    }

}

Please refer to ServiceStack Compression Docs , eg you can compress Service Responses with the [CompressResponse] attribute, eg:

[CompressResponse]
public class CompressedServices : Service
{
    public object Any(CompressDto request) => new CompressExamplesResponse(); 
    public object Any(CompressString request) => "foo"; 
    public object Any(CompressBytes request) => "foo".ToUtf8Bytes(); 
    public object Any(CompressStream request) => new MemoryStream("foo".ToUtf8Bytes()); 
    public object Any(CompressFile request) => new HttpResult(VirtualFileSources.GetFile("/foo"));

    public object Any(CompressAnyHttpResult request)
    {
        return new HttpResult(new CompressExamplesResponse());    // DTO
        return new HttpResult("foo", "text/plain");               // string
        return new HttpResult("foo".ToUtf8Bytes(), "text/plain"); // bytes
        //etc
    }
}

Http Headers 在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM