ASP.NET MVC 4捆绑和缩小:调试模式中使用Url Rewrite的错误路径

时间:2012-09-27 09:24:06

标签: asp.net-mvc url-rewriting asp.net-mvc-4 asp.net-optimization

我想使用ASP.NET MVC 4 Bundling and Minification功能,请假设我们运行调试模式,因此没有捆绑任何内容,但每个引用都只是呈现给单个标记。在当地一切正常:

示例

 public static void RegisterBundles(BundleCollection bundles)
 {
      bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                  "~/Scripts/jquery-{version}.js"));
 }

现在从视图中调用@Scripts.Render("~/bundles/jquery")时,会生成与此类似的标记:

 <script src="/Scripts/jquery-1.8.2.js"></script>

结果是相同的,如果我只写:

 <script src="@Url.Content("~/Scripts/jquery-1.8.2.js")"></script>

但是,当我将所有内容部署到互联网上的测试服务器(仍使用调试模式)时,启用了一些 Url重写,我将特定域或子域路由到特定文件夹。

例如,如果域名为sub1.example.com,则转发至example.com/__sub1__,如果sub2.example.com转发至example.com/__sub2__,依此类推。当我在浏览器中打开sub1.example.com时,通常不会发现此转发发生,网址不会更改,所有网址仍然有效,使用Url.Content(...)方法生成的引用也是如此。

但是由于一些奇怪的原因,对@Scripts.Render("~/bundles/jquery")的调用现在呈现出类似的内容:

 <script src="/__sub1__/Scripts/jquery-1.8.2.js"></script>

请注意“/ sub1 ”部分,它是不应生成的部分,并且永远不会出现在呈现的html代码中的某处,并导致404因为url重写转发失败。< / p>

...虽然

<script src="@Url.Content("~/Scripts/jquery-1.8.2.js")"></script>

...仍然呈现“/Scripts/jquery-1.8.2.js”的正确相对路径。我从来没有像这样重写Urls的其他问题。而且我不想摆脱这种重写。

显然,这同样适用于样式表。

我能尝试什么想法?

1 个答案:

答案 0 :(得分:1)

这是脚本/样式助手的当前实现的一个错误,这应该用1.1-alpha1版本修复,该版本应该很快(10月初)可用,因为支持使用在ASP.NET注册的VirtualPathProvider修复了这个一般类问题(正确解析资源路径)。