对此有一些类似的旧问题,一个回答,一个未回答。答案适用于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"
答案 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");
}
}