当捆绑包在MVC4中注册时,负责“拦截”http
的{{1}}个传入请求?
此外,因为每个包的哈希只计算一次(在第一次请求时),实际持有的地方, - 如果传入的哈希不匹配,是否可以返回/bundles/someBundle?v=1hDzBpmYJm4Iu-OjRN1YqS1WeNThVl0kStLJGP8WCr41
答案 0 :(得分:1)
负责“拦截”〜/ bundles / someBundle
的传入http请求
~/bundles/someBundle
没有收到的请求。它是您正在使用的服务器端帮助程序(Scripts.Render
),它在服务器上(在相同的HTTP请求中)解释此值并在生成的HTML中吐出正确的URL。
因为每个包的哈希只计算一次(在第一次请求时),实际持有的地方,
实际的包内容存储在服务器端缓存中:HttpContext.Cache
。实际哈希表示每次使用Scripts.Render
帮助程序时计算的此内容的SHA256哈希。
更新:
当您引用System.Web.Optimization程序集时,会自动注册System.Web.Optimization.BundleModule
,该程序集负责拦截对/bundles/someBundle?v=1hDzBpmYJm4Iu-OjRN1YqS1WeNThVl0kStLJGP8WCr41
等网址的请求并返回实际内容。
答案 1 :(得分:0)
您的Web项目中的App_Start文件夹中应该有一个名为BundleConfig.cs的文件。
该部分基本上将URL“/ bundles / something”链接到某些脚本。在以发布模式访问站点(未激活调试)时,它会自动将脚本合并到一个内存中文件中,最小化脚本,向请求添加缓存头并生成文件内容的哈希。
如果您正在调试,则应分离所有脚本以使调试更容易。
您要么重新定义在该文件中看到的包,要么声明自己的包。
享受。
答案 2 :(得分:0)
使用基于您正在服务的实际文件的内容的参数附加查询字符串的原因是解决缓存问题。您可以通知浏览器长时间缓存此请求并加快后续页面加载时间
因此对于这种捆绑机制的开发人员而言,该参数没有区别。唯一重要的是,如果您更改脚本或css的内容 - 哈希将更改,它将强制客户端浏览器从服务器请求新文件。
至于什么负责插入这个请求 - 在codeplex上有MVC的源代码,但我猜它会直接插入路由。