Asp.net mvc ASP.NET MVC在重写的VirtualPathProvider中禁用视图缓存
我正在使用可移植区域进行一些开发工作,因此我有一个覆盖的Asp.net mvc ASP.NET MVC在重写的VirtualPathProvider中禁用视图缓存,asp.net-mvc,virtualpathprovider,Asp.net Mvc,Virtualpathprovider,我正在使用可移植区域进行一些开发工作,因此我有一个覆盖的VirtualPathProvider Mypublic override bool FileExists(string virtualPath)似乎每隔几分钟就会被调用一次,这意味着MVC正在缓存视图 这在生产中可能很好,但我不知道如何在开发中关闭它。我希望在每次使用视图时调用VirtualPathProvider 有什么建议吗?为了子孙后代回答我自己的问题 我们最终覆盖了GetCacheDependency调用,以确保从不缓存视图。(我
VirtualPathProvider
Mypublic override bool FileExists(string virtualPath)
似乎每隔几分钟就会被调用一次,这意味着MVC正在缓存视图
这在生产中可能很好,但我不知道如何在开发中关闭它。我希望在每次使用视图时调用VirtualPathProvider
有什么建议吗?为了子孙后代回答我自己的问题 我们最终覆盖了GetCacheDependency调用,以确保从不缓存视图。(我们手动缓存视图)。我们必须创建一个FakeCacheDependency,让我们使用缓存中最后修改的日期 在我们的应用程序中,我们的虚拟视图称为CondorVirtualFile。(在构建视图引擎时,需要给它一个很酷的名称。)
你确定是MVC缓存了视图而不是浏览器吗?ctrl-F5查看是否调用视图。感谢您的提问和回答,它解决了我在DLL中拥有视图时相当恼人的缓存问题+谢谢你!!!我只是想分享一些想法。您还必须重写
GetFileHash()
方法。您还可以返回null
而不是FakeCacheDependency
实例。我发现了一个有用的资源:
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);
}
}