使用较新的CacheControl属性缓存HttpResult / memorystream

时间:2018-05-23 18:20:45

标签: caching servicestack

我刚刚发现了新的CacheControl属性并且它对标准POCO运行良好 - 我想知道是否需要不同的东西来缓存将HttpResult作为PDF返回的服务。 (该服务正在运行,但在调用该服务后,我在缓存中看不到任何记录。)

[Authenticate]
[CacheResponse(Duration = CacheExpirySeconds.TwentyFourHours)]  
public class AdvReportPDFService : Service
{
    public object Get(AdvRptPitchPercentages request)
    {
        var ms = SomeFunctionThatReturnsAMemoryStream();

        ms.Position = 0;
        return new ServiceStack.HttpResult(ms, "application/pdf");
    }
}

1 个答案:

答案 0 :(得分:2)

ServiceStack的缓存无法在您的服务实现中定义的HttpResult中缓存元数据(返回缓存响应时)。相反,您应该使用[AddHeader]请求过滤器属性来指定您的服务返回的自定义ContentType,并返回裸流,例如:

[Authenticate]
[AddHeader(ContentType = "application/pdf")]
[CacheResponse(Duration = CacheExpirySeconds.TwentyFourHours)]  
public class AdvReportPDFService : Service
{
    public object Get(AdvRptPitchPercentages request)
    {
        var ms = SomeFunctionThatReturnsAMemoryStream();
        return ms;
    }
}