MVC4打包:bundle的URL存储位置

3
当在MVC4中注册捆绑包时,负责“拦截”http请求的是谁,请求的路径为/bundles/someBundle?v=1hDzBpmYJm4Iu-OjRN1YqS1WeNThVl0kStLJGP8WCr41? 由于每个捆绑包的哈希值仅计算一次(在第一次请求时),它实际上保存在哪里,如果传入的哈希值不匹配,是否可以返回 404 ?

1
你正在尝试解决什么实际问题? - CodeCaster
@CodeCaster 我需要将带有旧/过时哈希的请求返回404。 - dark_ruby
ASP.NET MVC 的绑定器难道不会自动完成这个任务吗? - CodeCaster
@CodeCaster 不,无论哈希是否正确(甚至根本不存在),捆绑包仍然会被提供。 - dark_ruby
1
@dark_ruby 如果捆绑包已经提供,问题出在哪里?哈希值的作用是防止捆绑包更改时缓存。一个带有错误捆绑包哈希值的链接会来自哪里呢? - MikeSmithDev
3个回答

1

"拦截"~/bundles/someBundle的传入http请求的责任是什么

没有传入到~/bundles/someBundle的请求。在服务器端使用的帮助程序(Scripts.Render)会在同一HTTP请求中解释此值,并在生成的HTML中输出正确的url。

由于每个bundle的哈希值只计算一次(在第一次请求时),那实际上它在哪里保存呢?

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


更新:

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


谢谢,那么是什么负责拦截结果HTML中的“正确URL”的请求呢(我已经更新了我的问题以获得更多的清晰度)? - dark_ruby
是否可以插入BundleModule,以添加所需的行为? - dark_ruby
дёҚеЏҮиѓҢзљ„пәЊе› дёғеҢ“ж‚Ёе°†System.Web.OptimizationзЁ‹еғЏй›†еә•з”Ёе€°ж‚Ёзљ„йҰ№з›®дё­ж—¶пәЊж­¤жЁҰеқ—дәљдҢүз”ЁPreApplicationStartи‡ҒеЉЁжіЁе†ЊгЂ‚ - Darin Dimitrov

0

你的Web项目中应该有一个名为BundleConfig.cs的文件,位于App_Start文件夹中。

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

如果你处于调试状态,所有脚本都应该被分开以便于调试。

你可以重新定义在该文件中看到的bundles或声明一些自己的bundles。

祝使用愉快。


0

将查询字符串附加到基于正在提供的实际文件内容的参数,是为了解决缓存问题。这样,您可以告知浏览器将此请求缓存长时间,并加速后续页面加载时间。
因此,对于这种捆绑机制的开发人员来说,该参数没有任何区别。唯一重要的事情是,如果更改脚本或CSS的内容,则哈希值会更改,从而强制客户端浏览器从服务器请求新文件。
至于谁负责拦截这些请求-在codeplex上有MVC的源代码可用,但我猜它恰好插入路由。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接