ASP.NET MVC 覆盖 VirtualPathProvider 后禁用视图缓存

6
我正在使用可移植区域进行开发工作,因此我已经覆盖了VirtualPathProvider。我的public override bool FileExists(string virtualPath)似乎只被调用了几分钟,这意味着MVC正在缓存视图。这在生产环境中可能很好,但我无法弄清如何在开发过程中关闭它。我希望每次使用视图时都会调用VirtualPathProvider。有什么建议吗?

你确定是MVC在缓存视图而不是你的浏览器吗?按Ctrl-F5查看是否调用了你的视图。 - Erik Funkenbusch
谢谢你的问题和答案,解决了我在DLL中拥有视图时非常烦人的缓存问题! - Mark Milford
1个回答

6
回答自己的问题,为了后代的利益...
我们最终覆盖了GetCacheDependency调用,以确保视图永远不会被缓存。(我们手动缓存视图。)我们必须创建一个FakeCacheDependency,让我们使用缓存中的上次修改日期。
在我们的应用程序中,我们的虚拟视图被称为CondorVirtualFiles。(构建视图引擎时,您需要给它一个酷炫的名称。)
public override System.Web.Caching.CacheDependency GetCacheDependency(string virtualPath, System.Collections.IEnumerable virtualPathDependencies, DateTime utcStart)
        {
            var view = this.GetFile(virtualPath);
            if (view is CondorVirtualFile)
            {
                FakeCacheDependency fcd = new FakeCacheDependency((view as CondorVirtualFile).LastModified);
                return fcd;
            }
            return base.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
        }



 public class FakeCacheDependency : System.Web.Caching.CacheDependency
    {
        public FakeCacheDependency(DateTime lastModified)
        {
            base.SetUtcLastModified(lastModified);
        }
        public FakeCacheDependency()
        {
            base.SetUtcLastModified(DateTime.UtcNow);  
        }
    }

+1 谢谢!!! 我只是想分享一些想法。你还需要覆盖 GetFileHash() 方法。此外,你可以返回 null 而不是一个 FakeCacheDependency 实例。并且我找到了一个有用的资源:http://blog.rocketbase.co.uk/2011/04/asp-net-mvc-virtual-path-provider/ - Warlock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接