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