首页 >后端开发 >C++ >如何使用属性防止在特定 ASP.NET MVC 操作中进行缓存?

如何使用属性防止在特定 ASP.NET MVC 操作中进行缓存?

Barbara Streisand
Barbara Streisand原创
2025-01-14 15:22:44560浏览

How Can I Prevent Caching in Specific ASP.NET MVC Actions Using Attributes?

避免在具有自定义属性的 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn