gpt4 book ai didi

servicestack - 启用gzip/deflate压缩

转载 作者:行者123 更新时间:2023-12-04 13:19:47 33 4
gpt4 key购买 nike

我将ServiceStack(版本3.9.44.0)用作Windows服务(因此,我没有使用IIS),并且同时使用了它的功能作为API和服务于网页。

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

我以为如果客户端的请求中包含Accept-Encoding:gzip,deflate header ,则ServiceStack会透明地压缩数据,但是在返回的响应中看不到任何对应的Content-Encoding:gzip

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

  • 在将ServiceStack用作独立服务(不带IIS)的情况下,如何在浏览器接受响应时为响应启用压缩。
  • 在C#客户端的上下文中,类似地,我如何确保客户端/服务器之间的通信被压缩。

  • 如果我缺少任何东西,欢迎您的帮助。

    谢谢你。

    最佳答案

    如果要在整个API上全局启用压缩,则另一种方法是:
    将此替代添加到您的AppHost中:

    public override IServiceRunner<TRequest> CreateServiceRunner<TRequest>(ActionContext actionContext)
    {
    return new MyServiceRunner<TRequest>(this, actionContext);
    }
    然后像这样实现该类:
    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对象。
    引用
  • ServiceStack New Api
  • 关于servicestack - 启用gzip/deflate压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16484763/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com