Caching 如何停止MVC缓存调用动作方法的结果?

Caching 如何停止MVC缓存调用动作方法的结果?,caching,asp.net-mvc-2,Caching,Asp.net Mvc 2,我在IE缓存操作方法的结果时遇到问题 我发现的其他文章与安全性和[Authorize]属性有关。这个问题与安全无关 这是一个非常简单的“记录投票,获取平均值,返回平均值和投票数”方法。唯一稍微有趣的是,它是通过Ajax调用的,并返回一个Json对象。我相信缓存的是Json对象 当我在FireFox上运行它并用Firebug观看XHR流量时,一切都很完美。然而,在IE8下,“throbber”图形没有时间显示,显示“new”avg和count的页面元素与jQuery注入页面的页面元素从来没有区别

我在IE缓存操作方法的结果时遇到问题

我发现的其他文章与安全性和[Authorize]属性有关。这个问题与安全无关

这是一个非常简单的“记录投票,获取平均值,返回平均值和投票数”方法。唯一稍微有趣的是,它是通过Ajax调用的,并返回一个Json对象。我相信缓存的是Json对象

当我在FireFox上运行它并用Firebug观看XHR流量时,一切都很完美。然而,在IE8下,“throbber”图形没有时间显示,显示“new”avg和count的页面元素与jQuery注入页面的页面元素从来没有区别

我需要一种方法告诉MVC永远不要缓存这个动作方法

这篇文章似乎解决了这个问题,但我无法理解:

我需要更多的上下文来理解如何扩展AuthorizationAttribute。请把你的回答当作是在和一个对MVC缺乏深刻理解的人说话,即使这意味着你要用一篇关于一些基本知识/必备条件的文章来回答

谢谢


Trey Carroll

MVC不会缓存结果。是的

所以你必须告诉我不要这样做

我是这样做的。首先,一个属性:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public sealed class CacheControlAttribute : ActionFilterAttribute
{
    public CacheControlAttribute(HttpCacheability cacheability)
    {
        this._cacheability = cacheability;
    }

    public HttpCacheability Cacheability { get { return this._cacheability; } } 

    private HttpCacheability _cacheability;

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache;
        cache.SetCacheability(_cacheability);
    }
}
接下来是一项行动:

    [CacheControl(HttpCacheability.NoCache), HttpGet]
    public JsonResult MyAction()

谢谢你,克雷格。这正是我需要的。我刚刚将该类添加到MVC项目的根级别,但是,我确信这是错误的。这个类在MVC2解决方案中的正确位置是什么?由您决定。这实际上就是框架代码。您可以将其放在单独的类库或web应用程序中的“Mvc”命名空间中。现在在Mvc中,这要简单得多,只需使用OutputCache并将持续时间设置为零秒:[OutputCache(持续时间=0)]public ActionResult Cities(int provinceId){var myData=SomeClassInstance.SomeMethod();返回Json(myData,JsonRequestBehavior.AllowGet);}@ToreAurstad:这不太一样。您可能希望服务器缓存结果,但浏览器不缓存结果。@ToreAurstad您的解决方案是唯一适合我的解决方案。您尝试过几种解决方案。