諮詢區
-
jackmusick:
我想禁掉瀏覽器緩存,這樣我的client端每次都能看到server端的最新內容,在 asp.net 時代可以這麼寫。
public class NoCacheAttribute : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetNoStore();
base.OnResultExecuting(filterContext);
}
}
但在 asp.net core 項目中我發現並沒有 HttpContext.Response.Cache
屬性,請問是否有其他可替換的方式?
回答區
-
Darin Dimitrov:
你可以直接在 response header 上添加你需要設置的值,參考如下代碼:
public class NoCacheAttribute : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Headers["Cache-Control"] = "no-cache, no-store, must-revalidate";
filterContext.HttpContext.Response.Headers["Expires"] = "-1";
filterContext.HttpContext.Response.Headers["Pragma"] = "no-cache";
base.OnResultExecuting(filterContext);
}
}
-
mk_yo:
在 asp.net core 中,ResponseCache 特性被保留了下面,所以你可以像下面這樣設置。
[ResponseCache(NoStore = true, Location = ResponseCacheLocation.None)]
public class HomeController : Controller
{
}
-
Marco Alves:
如果你需要在全局作用域上禁用,可以利用 Middleware 機制實現,參考如下代碼。
namespace Onsolve.ONE.WebApi.Middlewares
{
public sealed class RequestHandlerMiddleware
{
private readonly RequestDelegate next;
private readonly ILogger logger;
public RequestHandlerMiddleware(ILogger<RequestHandlerMiddleware> logger, RequestDelegate next)
{
this.next = next;
this.logger = logger;
}
public async Task Invoke(HttpContext context)
{
await next(context);
context.Response.Headers["Cache-Control"] = "no-cache, no-store, must-revalidate";
context.Response.Headers["Expires"] = "-1";
context.Response.Headers["Pragma"] = "no-cache";
}
}
}
點評區
這功能好,讓瀏覽器實時查看server端內容,尤其是集成到中間件中,學習了。
本文分享自微信公衆號 - 一線碼農聊技術(dotnetfly)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。