繁体   English   中英

MVC4 Bundling:包含bundle的URL的位置

[英]MVC4 Bundling: where the URL for bundle is held

当捆绑包在MVC4中注册时,负责“拦截” /bundles/someBundle?v=1hDzBpmYJm4Iu-OjRN1YqS1WeNThVl0kStLJGP8WCr41传入http请求是/bundles/someBundle?v=1hDzBpmYJm4Iu-OjRN1YqS1WeNThVl0kStLJGP8WCr41 因为每个包的哈希只计算一次(在第一次请求时),实际持有的地方, - 如果传入的哈希不匹配,是否可以返回404

什么负责“拦截”〜/ bundles / someBundle的传入http请求

没有来自~/bundles/someBundle传入请求。 它是您正在使用的服务器端帮助程序( Scripts.Render ),它在服务器上(在相同的HTTP请求中)解释此值并在生成的HTML中吐出正确的URL。

因为每个包的哈希只计算一次(在第一次请求时),实际持有的位置,

实际的bundle内容存储在服务器端缓存中: HttpContext.Cache 实际哈希表示此内容上的SHA256哈希值,每次使用Scripts.Render帮助程序时都会计算该哈希值。


更新:

当您引用System.Web.Optimization程序集时,会自动注册System.Web.Optimization.BundleModule ,该程序集负责拦截对诸如/bundles/someBundle?v=1hDzBpmYJm4Iu-OjRN1YqS1WeNThVl0kStLJGP8WCr41类的URL的请求/bundles/someBundle?v=1hDzBpmYJm4Iu-OjRN1YqS1WeNThVl0kStLJGP8WCr41并返回实际内容。

您应该在Web项目的App_Start文件夹中有一个名为BundleConfig.cs的文件。

该部分基本上将URL“/ bundles / something”链接到某些脚本。 在以发布模式访问站点(未激活调试)时,它会自动将脚本合并到一个内存中文件中,最小化脚本,向请求添加缓存头并生成文件内容的哈希。

如果您在调试中,则应分离所有脚本以使调试更容易。

您要么重新定义在该文件中看到的包,要么声明自己的包。

请享用。

使用基于您正在服务的实际文件的内容的参数附加查询字符串的原因是解决缓存问题。 您可以通知浏览器长时间缓存此请求并加快后续页面加载时间。
因此对于这种捆绑机制的开发人员而言,该参数没有区别。 唯一重要的是,如果您更改脚本或css的内容 - 哈希将更改,它将强制客户端浏览器从服务器请求新文件。
至于什么负责插入这个请求 - 在Codeplex上有MVC的源代码,但我猜它插入到路由中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM