Asp.net

.NET Core 中的 HttpContext.Response.Cache 等效項?

  • November 6, 2019

我正在嘗試為以前版本的 ASP.NET 重現我在此處找到的內容

基本上,我希望能夠禁用記憶體,以便我的客戶始終查看伺服器以獲取資訊。我為此添加了一個 HTML 元標記,但對於已經擁有此資訊的客戶端,我想嘗試在後端處理記憶體策略。

該文章提到這樣做是為了將記憶體策略設置為操作過濾器。

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);
}
}

但是,HttpContext 在 ASP.NET Core 中似乎沒有 Response.Cache。有沒有其他方法可以做到這一點?

謝謝!

您可以直接將相應的響應標頭設置為所需的值:

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);
   }
}

您可以使用建構屬性控制它:

[ResponseCache (NoStore = true, Location = ResponseCacheLocation.None)]

引用自:https://stackoverflow.com/questions/41700759