首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启用gzip/平减压缩

启用gzip/平减压缩
EN

Stack Overflow用户
提问于 2013-05-10 14:36:42
回答 2查看 3.4K关注 0票数 6

我使用ServiceStack (3.9.44.0版)作为Windows (所以我不使用IIS),我同时使用它作为API和服务网页的功能。

但是,当客户端支持压缩时,我还没有找到应该如何启用压缩。

我设想如果客户机的请求包括Accept-Encoding:gzip,deflate头,Accept-Encoding:gzip,deflate会透明地压缩数据,但在返回的响应中没有看到任何相应的Content-Encoding:gzip

所以我有几个相关的问题:

  1. 在使用ServiceStack作为独立服务(没有IIS)的上下文中,如何在浏览器接受响应时启用对响应的压缩。
  2. 在C#客户机的上下文中,类似地,我如何确保客户机/服务器之间的通信被压缩。

如果我错过了什么,任何帮助都会受到欢迎。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-18 16:30:34

如果您希望在整个API中启用全局压缩,另一个选项是这样做:

将此覆盖添加到AppHost中:

代码语言:javascript
复制
public override IServiceRunner<TRequest> CreateServiceRunner<TRequest>(ActionContext actionContext)
{
    return new MyServiceRunner<TRequest>(this, actionContext);
}

然后像这样实现这个类:

代码语言:javascript
复制
public class MyServiceRunner<TRequest> : ServiceRunner<TRequest>
{
    public MyServiceRunner(IAppHost appHost, ActionContext actionContext) : base(appHost, actionContext)
    {
    }

    public override void OnBeforeExecute(IRequestContext requestContext, TRequest request)
    {
        base.OnBeforeExecute(requestContext, request);
    }

    public override object OnAfterExecute(IRequestContext requestContext, object response)
    {
        if ((response != null) && !(response is CompressedResult))
            response = requestContext.ToOptimizedResult(response);

        return base.OnAfterExecute(requestContext, response);
    }

    public override object HandleException(IRequestContext requestContext, TRequest request, Exception ex)
    {
        return base.HandleException(requestContext, request, ex);
    }
}

将调用OnAfterExecute并给您更改响应的机会。在这里,我正在压缩任何不是null且尚未压缩的内容(以防我在某个地方使用ToOptimizedResultUsingCache )。如果需要,可以进行更多的选择,但在我的例子中,我是所有带有json的POCO对象。

参考文献

票数 9
EN

Stack Overflow用户

发布于 2013-05-14 11:46:38

对于那些感兴趣的人,我自己问题的部分答案是,您可以使用扩展方法ToOptimizedResult(),或者,如果您使用的是缓存ToOptimizedResultUsingCache()

例如,返回压缩结果:

代码语言:javascript
复制
public class ArticleService : Service
{
  public object Get(Articles request) {
    return base.RequestContext.ToOptimizedResult( 
       new List<Articles> { 
            new Article {Ref = "SILVER01", Description = "Silver watch"},
            new Article {Ref = "GOLD1547", Description = "Gold Bracelet"}
       });
  }
}

参考文献

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16484763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档