我是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标题时,我可以看到
在客户端,我找不到避免缓存的解决方案,但我认为UI-Router不应该缓存任何内容。
我在web.config中添加了额外的措施:
attribute [OutputCache]
甚至,我创建了自己的自定义<system.webServer>
<caching enabled="false" enableKernelCache="false" />
</system.webServer>
,但没有效果。
我不知道还能做什么。
PS:对不起我的英文
答案 0 :(得分:1)
如果有任何其他插件可以缓存其模板,那么您的解决方案将清理这些模板并使这些插件无法使用..因此您的解决方案并不好。
要解决html缓存问题,你应该在html文件名末尾添加随机查询字符串...你提到的其他解决方案是非缓存api响应而不是静态内容(html / js / css文件)
将随机查询字符串添加到ur html。您可以使用grunt-cache-busting或gulp-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提供。所以,谢谢两者。