我一直在尝试ASP.NET MVC 4中的新的缩小和捆绑功能,只要您使用css和js文件的默认文件夹约定,它的效果非常好.
/Content /Scripts
我通常将css和脚本放在一个名为Static的文件夹中
/Static/Css /Static/Js
我试图注册我自己的捆绑包,如下所示:
public static class BundleCollectionExtensions { public static void RegisterScriptsAndCss(this BundleCollection bundles) { var bootstrapCss = new Bundle("~/Static/Css",new CssMinify()); bootstrapCss.AddDirectory("~/Static/Css","*.css"); bootstrapCss.AddFile("~/Static/Css/MvcValidation.css"); bootstrapCss.AddFile("~/Static/Css/bootstrap-responsive.min.css"); bootstrapCss.AddFile("~/Static/Css/bootstrap.min.css"); bundles.Add(bootstrapCss); var bootstrapJs = new Bundle("~/Static/Js",new JsMinify()); bootstrapJs.AddDirectory("~/Static/Js","*.js"); bootstrapJs.AddFile("~/Static/Js/jquery-1.7.1.min.js"); bootstrapJs.AddFile("~/Static/Js/jquery.validate.min.js"); bootstrapJs.AddFile("~/Static/Js/jquery.validate.unobtrusive.min.js"); bootstrapJs.AddFile("~/Static/Js/bootstrap.min.js"); bootstrapJs.AddFile("~/Static/Js/gunsforhire.js"); bundles.Add(bootstrapJs); } }
在里面
Global.ascx.cs
我做到了
BundleTable.Bundles.RegisterScriptsAndCss();
<link href="/Static/Css?v=D9JdmLZFFwjRwraNKfA1uei_YMoBoqLf-gFc0zHivM41" rel="stylesheet" type="text/css" /> <script src="/Static/Js?v=mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1" type="text/javascript"></script>
但是它不起作用,请求如下所示:
Request URL:http://localhost:49603/Static/Js?v=mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1 Request Method:GET Status Code:301 Moved Permanently (from cache) Query String Parametersview URL encoded v:mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1 Request URL:http://localhost:49603/Static/Js/?v=mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1 Request Method:GET Status Code:404 Not Found Request Headersview source Accept:*/* Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8 Connection:keep-alive Host:localhost:49603 Referer:http://localhost:49603/ User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML,like Gecko) Chrome/17.0.963.56 Safari/535.11 Query String Parametersview URL encoded v:mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1 Response Headersview source Cache-Control:private Content-Length:4757 Content-Type:text/html; charset=utf-8 Date:Thu,01 Mar 2012 19:05:44 GMT Server:Microsoft-IIS/7.5 X-Powered-By:ASP.NET X-SourceFiles:=?UTF-8?B? QzpcQENvZGVccGVsbGVccGVsbGVoZW5yaWtzc29uLnNlXHNyY1xXZWJcU3RhdGljXEpzXA==?=
我究竟做错了什么?
更新
我想我终于可以通过以下方式解决这个问题:
>删除AddDirectory调用bootstrapCss.AddDirectory(“〜/ Static / Css”,“* .css”);
>给出不反映真实目录结构的bundle的路径
解决方法
你在做什么“错”是你的捆绑路径对应一个REAL路径.据了解,当“/ Static / Css?v = D9JdmLZFFwjRwraNKfA1uei_YMoBoqLf-gFc0zHivM41”的请求进入时,路由引擎首先查找物理路径.它找到与您的文件夹“静态”匹配,并尝试找到一个匹配“Css?v = D9JdmLZFFwjRwraNKfA1uei_YMoBoqLf-gFc0zHivM41”的文件.当它找不到一个,因为它不存在,它给了一个404.(我也看到一个访问被拒绝.)当路由引擎找不到一个物理文件路径,然后看起来像其他处理程序,如捆绑和细化以提供请求.
无论如何,我认为你已经从你的意见中解决了,但我不知道任何人发现你的问题会非常清楚.只需更改您的注册:
var bootstrapCss = new Bundle("~/Static/Css",new CssMinify());
至:
var bootstrapCss = new Bundle("~/bundles/Css",new CssMinify());
如果你做出这样的改变,你的问题就会消失,(授予没有对应于“捆绑”的物理路径).