ServiceStack覆盖Cache-Control私有

时间:2015-03-22 16:54:11

标签: servicestack cache-control

对此有一些类似的旧问题,一个回答,一个未回答。答案适用于ServiceStack 3,并且接受的答案在4.0.36中对我不起作用

我可以使用ResponseFilters创建自定义响应标头,但是无法覆盖Cache-Control - 它始终设置为私有。

public class NoCacheAttribute : ResponseFilterAttribute
{
    public override void Execute(IRequest req, IResponse res, object responseDto)
   {
       res.AddHeader("Cache-Control", "no-store");  //does not work
       res.AddHeader("Test", "no-store");  //works

   }
} 

同样,我也尝试使用以下内容设置Service实现本身,这仅适用于自定义标头。我已经使用了CacheControl常量和" Cache-Control"两种方法中的字符串没有区别:

Response.AddHeader(HttpHeaders.CacheControl, "no-store"); //doesn't work
Response.AddHeader("Test2", "no-store");  //works

最近有没有人在ServiceStack中成功完成此操作?似乎某些较低级别的ASP.NET函数将Cache-Control设置为" private"

1 个答案:

答案 0 :(得分:1)

这是我在v4中的内容。 我不记得为什么我必须从ResponseFilter切换到RequestFilter,但我认为这与某些早期结束请求并跳过ResponseFilter的情况有关。

RequestFilter确保您尽快将标题放到IResponse对象上。

public class NoCacheAttribute : RequestFilterAttribute
{
    public override void Execute(IRequest req, IResponse res, object requestDto)
    {
        res.AddHeader(HttpHeaders.CacheControl, "no-store,must-revalidate,no-cache,max-age=0");
    }
}