简体   繁体   English

压缩服务栈的响应

[英]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.我尝试使用全局过滤器压缩服务堆栈的响应,但它不起作用抛出 500 错误代码。 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在这里我也尝试了 [CompressResponse] 属性

MvcController Mvc控制器

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

ServiceStack.ServiceInterface服务堆栈.服务接口

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

[CompressResponse] [压缩响应]

public class CommonDAL: DBConnection, ICommonDAL {公共 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:请参考ServiceStack Compression Docs ,例如您可以使用[CompressResponse]属性压缩服务响应,例如:

[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 Http 接头在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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