在.NET Core中,HttpContext.Response.Cache的等效方式是什么?

11 浏览
0 Comments

在.NET Core中,HttpContext.Response.Cache的等效方式是什么?

我正在尝试复现我在之前版本的ASP.NET中找到的一个东西。基本上,我想能够禁用缓存,使我的客户端始终从服务器获取信息。我已经添加了一个HTML的meta标签来实现这一点,但对于已经具有这些信息的客户端,我想尝试在后端处理缓存策略。

帖子提到可以使用操作过滤器来设置缓存策略。

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。有没有其他的方法来实现这个?

谢谢!

0
0 Comments

在.NET Core中,我们经常需要控制HTTP响应的缓存行为,这可以通过HttpContext.Response.Cache属性来实现。然而,有一些情况下我们需要在.NET Core中实现与HttpContext.Response.Cache相同的功能,但是却找不到等效的方法。下面我们将介绍这个问题的出现原因以及解决方法。

问题的出现原因是在.NET Core中,HttpContext.Response.Cache属性已被移除,因此无法直接使用它来控制HTTP响应的缓存行为。这给一些开发者带来了困扰,特别是那些习惯了使用HttpContext.Response.Cache的开发者。

解决方法是使用ResponseCache特性来实现与HttpContext.Response.Cache相同的功能。我们可以通过设置ResponseCache特性的相关属性来控制HTTP响应的缓存行为。比如,我们可以使用NoStore属性来禁止缓存,使用Location属性来指定缓存位置。下面是一个示例代码片段,展示了如何使用ResponseCache特性来实现禁止缓存和指定缓存位置的功能:

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

此代码片段将禁止缓存,并将缓存位置设置为ResponseCacheLocation.None。

另外,如果我们需要设置must-revalidate属性,可以通过设置ResponseCache特性的HttpCacheRevalidation属性来实现。下面是一个示例代码片段,展示了如何使用ResponseCache特性来设置must-revalidate属性:

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

此代码片段将禁止缓存、将缓存位置设置为ResponseCacheLocation.None,并将must-revalidate属性设置为必须重新验证。

虽然在.NET Core中移除了HttpContext.Response.Cache属性,但我们可以通过使用ResponseCache特性来实现与HttpContext.Response.Cache相同的功能。通过设置ResponseCache特性的相关属性,我们可以控制HTTP响应的缓存行为,包括禁止缓存、指定缓存位置以及设置must-revalidate属性等。

0
0 Comments

在.NET Core中,HttpContext.Response.Cache方法不再可用。这可能会导致在迁移现有代码或使用.NET Core开发新应用程序时的困扰。然而,可以通过直接设置相应的响应头来达到相同的效果。

以下是一个示例代码片段,演示如何在.NET Core中模拟HttpContext.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);

}

}

上述代码创建了一个名为NoCacheAttribute的自定义ActionFilterAttribute。在OnResultExecuting方法中,我们直接设置了HttpContext.Response.Headers的相应值,以模拟原来的HttpContext.Response.Cache方法的行为。具体来说,我们设置了Cache-Control头为"no-cache, no-store, must-revalidate",Expires头为"-1",以及Pragma头为"no-cache"。

通过将NoCacheAttribute应用于控制器或操作方法,我们可以确保在每次请求时都会设置这些响应头,从而禁用缓存。

希望这个解决方法能帮助你在.NET Core中模拟HttpContext.Response.Cache的功能。如果你想了解更多关于.NET Core缓存的信息,可以参考Microsoft官方文档:learn.microsoft.com/en-us/aspnet/core/performance/caching/middleware?view=aspnetcore-2.2

0