IE11缓存问题使用MVC 5

时间:2017-03-03 01:23:43

标签: javascript asp.net-mvc caching

我有专门针对IE 11的浏览器页面缓存问题, SomePage 页面始终从浏览器缓存加载。相同的页面在Edge,Chrome和FF中完美运行。

从JS函数调用页面如下:

$.ajaxJsonAntiForgery({
        type: "POST",
        url: '@Html.Raw(Url.Action("SomeAPI", "cntrl"))',
        dataType: "json",
        data: { model: model },
        success: function (result) {
            if (result.Success) {
                window.location = '@Html.Raw(Url.Action("SomePage", "cntrl"))';
        ...

我尝试了以下方法:

  1. 使用URL附加一些随机数。 - 没用?

  2. 在操作方法中添加了以下代码: - 无法正常工作

    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Cache.SetNoStore(); Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); Response.Cache.SetMaxAge(TimeSpan.Zero); Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);

  3. 在Fiddler中我可以看到以下标题:

    Fiddler

    1. 在SomePage操作方法上添加OutputCache属性。 - 没用?

      [OutputCache(NoStore = true,Duration = 0,VaryByParam =“*”,Location = System.Web.UI.OutputCacheLocation.None)]

    2. Fiddler

      [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
      

      enter image description here

      请告知,此页面标题中还应该指示浏览器 - 它不应该缓存此页面吗?

1 个答案:

答案 0 :(得分:1)

您可以全局关闭缓存。或者通过装饰控制器中的动作

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
    Public ActionResult SomeApi(string param){
    ...
    }
  

在ASP.NET MVC中,您可以使用OutputCacheAttribute属性进行标记   要缓存其输出的操作方法。如果你标记一个   控制器使用OutputCacheAttribute属性,输出全部   控制器中的操作方法将被缓存[或不缓存,具体取决于属性值]。   MSDN Article

另外值得注意的是:如果您的页面实际上没有更改,那么ASP.NET非常智能,可以使用缓存页面来提高速度。

尝试上述故障排除步骤后更新。 在调用之前设置Ajax怎么样?

$.ajaxSetup({ cache: false});