如果你想在你的 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 并让您有机会更改响应。在这里,我正在压缩任何非空且尚未压缩的内容(以防我在某处使用 ToOptimizedResultUsingCache)。如果需要,您可以更具选择性,但在我的情况下,我都是带有 json 的 POCO 对象。
参考