我正在尝试使用C#动作过滤器从标头中删除Pragma:no-cache,但是没有任何运气。
我已在网站上使用ARR进行磁盘缓存。但是我的网站有些页面不需要磁盘缓存。
为此,我需要从标题中删除Pragma或任何其他缓存控件。 这样就不会将页面包括在磁盘缓存中。
我尝试了以下代码
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// here condition of my action method and controller name
HttpContext.Response.Headers.Remove("Pragma", "no-cache");
//OR
HttpContext.Request.Headers.Remove("Pragma", "no-cache");
}
但是我的动作方法仍然包含语用
如果我更新到web.config文件中以删除/更新标头值,而不是将其从所有网站方法中删除。
因此,如果可能的话,删除该表单Action过滤器对我们不利。
任何帮助将不胜感激。
答案 0 :(得分:0)
您可以使用Middleware
进行此操作-尽管我还没有尝试过,但是您应该也可以将下面的代码改编为某种Filter
。
基本上,正如@AliBahrami所说,一旦响应开始,您就无法更改标头-因此,您需要提供一个将由框架调用的func,它将为您完成此功能-在示例中为Response.OnStarting
下方:
public static IApplicationBuilder UseNoCachingPolicy( this IApplicationBuilder applicationBuilder )
{
return applicationBuilder.Use( async (context, next) => {
if(/*this request is one I don't want to cache*/)
{
context
.Response
.OnStarting( state => {
var responseContext = (HttpContext)state;
//remove the header you don't want in the `responseContext`
return Task.CompletedTask;
}, context );
}
await next();
});
}