Caching Breeze元数据请求URL与缓存中断

Caching Breeze元数据请求URL与缓存中断,caching,asp.net-web-api,breeze,hottowel,Caching,Asp.net Web Api,Breeze,Hottowel,我目前正在使用Breeze.js(版本1.4.1)和HotTower模板,一切都运行得非常好 但是,我想知道是否有一种方法可以让breeze在发送的请求中包含一个可配置的后缀,例如?v=1.0.0.1,以类似于我目前使用require.js在版本更改期间破坏本地缓存的方式 这将提供让用户在本地缓存元数据的好处,并避免对相同的未更改元数据进行不必要的请求。甚至还有服务器端缓存,尽可能避免元数据生成 对于我目前正在使用的实际WebApi缓存,这样可以很好地适应它。好吧,我找到了一种方法,没有bree

我目前正在使用Breeze.js(版本1.4.1)和HotTower模板,一切都运行得非常好

但是,我想知道是否有一种方法可以让breeze在发送的请求中包含一个可配置的后缀,例如
?v=1.0.0.1
,以类似于我目前使用
require.js
在版本更改期间破坏本地缓存的方式

这将提供让用户在本地缓存元数据的好处,并避免对相同的未更改元数据进行不必要的请求。甚至还有服务器端缓存,尽可能避免元数据生成


对于我目前正在使用的实际WebApi缓存,这样可以很好地适应它。

好吧,我找到了一种方法,没有breeze的任何特定支持,只需要WebApi路由

我只是将控制器路由基本更改为以下内容:

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
            name: "BreezeApi",
            routeTemplate: "breeze/{appVersion}/{controller}/{action}"
        );
然后,在创建
EntityManager
时,我按如下方式执行操作:

var manager = new breeze.EntityManager('breeze/' + appVersion + '/data');
其中,
appVersion
具有增量数字版本值

这允许您稍后为元数据操作配置缓存,例如:

[HttpGet]
[CacheOutput(ClientTimeSpan = CLIENT_DURATION, ServerTimeSpan = SERVER_DURATION)]
public string Metadata()
{
    return _contextProvider.Metadata();
}

如果有人有一个更干净的解决方案,或者是breeze内部实现的解决方案,我将保留这个问题。

您可以查看breeze文档主题“”,该主题描述在JavaScript文件中捕获元数据并将其加载到其他脚本旁边的index.html中。您可以将标准的缓存破坏技术应用于此类metadata.js,甚至可以从CDN进行分发(如果CDN使您的船漂浮的话)。

这是一种非常吸引人的版本控制技术,Pablo。谢谢分享。是的,我研究过了,但是我不想让物理生成的文件在启动时维护,也不想让应用程序改变它自己的物理结构,因为我是通过WebDeploy自动部署的。幸运的是,我找到了如上所示的快速解决方案,效果非常好。顺便说一句,微风真棒这是有道理的。事实上,这是非常有意义的,我已经冒昧地更新了breeze文档(我在上面提到过),在这里指出了这个问题和您的答案。谢谢你:)