无法检测的缓存

时间:2015-07-17 09:53:16

标签: asp.net-mvc angularjs caching angular-ui-router

我是ASP.NET MVC 5的{​​{1}}和客户端server-side的网络应用开发者。客户端的导航使用模块UI-Router进行管理。在服务器端,我配置了自定义身份验证和授权。当我执行应用程序时,可以看到带有许多链接的导航栏。特别是,我有一个名为"概述"的链接。重定向到控制器概述。

代码客户端(html):

AngularJS

要重定向的代码客户端(角度):

<a ui-sref="Overview">Overview</a>

控制器代码:

.config(function ($stateProvider, $urlRouterProvider) {
     $urlRouterProvider.otherwise("Home/Index");
     $stateProvider
        .state("Overview", {
            templateUrl: "Home/Overview",
            url: "/overview"
        })

使用[OutputCache(Duration=0, NoStore=true)] [AllowAnonymous] public ActionResult Overview() { return PartialView(); } "return PartialView()"行代码中的断点,当我点击&#34;概述&#34;时,我可以看到controller返回部分视图在菜单应用程序中但是当我第二次点击时,断点不会触发。我认为这是一个缓存问题。

我已经读过可以生成缓存问题:  *在服务器端。  *在客户端。  *甚至是IIS。

我尝试了很多解决方案:在服务器端,我使用controller。 当我在浏览器中阅读http标题时,我可以看到

enter image description here

在客户端,我找不到避免缓存的解决方案,但我认为UI-Router不应该缓存任何内容。

我在web.config中添加了额外的措施:

attribute [OutputCache]

甚至,我创建了自己的自定义<system.webServer> <caching enabled="false" enableKernelCache="false" /> </system.webServer> ,但没有效果。

我不知道还能做什么。

PS:对不起我的英文

2 个答案:

答案 0 :(得分:1)

如果有任何其他插件可以缓存其模板,那么您的解决方案将清理这些模板并使这些插件无法使用..因此您的解决方案并不好。

要解决html缓存问题,你应该在html文件名末尾添加随机查询字符串...你提到的其他解决方案是非缓存api响应而不是静态内容(html / js / css文件)

将随机查询字符串添加到ur html。您可以使用grunt-cache-bustinggulp-rev等模块,也可以使用查询字符串作为参数query-string-cache-busting

请注意,datetime / file-hash是最好的缓存破坏参数

答案 1 :(得分:0)

好的,我找到了解决方案。

尽管避免使用OutputCache之类的属性从服务器端缓存,或者避免从IIS设置我的web.config缓存,但问题仍然存在。

AngularJS是有罪的。 In other post我找到了解决方案。

myApp.run(function($rootScope, $templateCache) {
    $rootScope.$on('$viewContentLoaded', function() {
        $templateCache.removeAll();
    });
});

此解决方案由Mark Rajcok和Valentyn Shybanov提供。所以,谢谢两者。