避免在具有自定义属性的 ASP.NET MVC 操作中进行缓存
在 ASP.NET MVC 中,有选择地禁用特定操作的缓存对于确保数据准确性至关重要,尤其是在处理动态或敏感信息时。 本文演示了如何创建和利用自定义属性来实现此目的。
缓存控制的自定义属性
为了防止基于每个操作进行缓存,我们可以创建一个自定义属性来覆盖默认的缓存行为。下面是一个实际的例子:
<code class="language-csharp">[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public sealed class NoCacheAttribute : ActionFilterAttribute { public override void OnResultExecuting(ResultExecutingContext filterContext) { // Aggressively disable caching at multiple levels filterContext.HttpContext.Response.Cache.SetExpires(DateTime.Now.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); } }</code>
实现 NoCache 属性
将此 NoCache
属性应用于操作方法可有效禁用该特定操作的缓存。 例如:
<code class="language-csharp">[NoCache] public ActionResult GetRealTimeData() { // Action implementation... }</code>
控制器级或应用程序范围的缓存预防
NoCache
属性也可以应用于控制器级别,以禁用该控制器内所有操作的缓存:
<code class="language-csharp">[NoCache] public class MyDataController : Controller { public ActionResult GetData() { // Action implementation... } }</code>
补充客户端方法
虽然服务器端属性至关重要,但通过客户端措施加强这一点可以提高缓存预防的有效性。 在 jQuery 中,可以按如下方式完成:
<code class="language-javascript">$.ajax({ cache: false, // Other AJAX settings... });</code>
通过结合服务器端属性和客户端配置,您可以确保 ASP.NET MVC 应用程序中强大的缓存防护,从而保证向用户交付新鲜且准确的数据。
以上是如何使用属性防止在特定 ASP.NET MVC 操作中进行缓存?的详细内容。更多信息请关注PHP中文网其他相关文章!