我使用ServiceStack (3.9.44.0版)作为Windows (所以我不使用IIS),我同时使用它作为API和服务网页的功能。
但是,当客户端支持压缩时,我还没有找到应该如何启用压缩。
我设想如果客户机的请求包括Accept-Encoding:gzip,deflate头,Accept-Encoding:gzip,deflate会透明地压缩数据,但在返回的响应中没有看到任何相应的Content-Encoding:gzip。
所以我有几个相关的问题:
如果我错过了什么,任何帮助都会受到欢迎。
谢谢。
发布于 2013-08-18 16:30:34
如果您希望在整个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对象。
参考文献
发布于 2013-05-14 11:46:38
对于那些感兴趣的人,我自己问题的部分答案是,您可以使用扩展方法ToOptimizedResult(),或者,如果您使用的是缓存ToOptimizedResultUsingCache()。
例如,返回压缩结果:
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"}
});
}
}参考文献
https://stackoverflow.com/questions/16484763
复制相似问题