我想使用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的其他问题。而且我不想摆脱这种重写。
显然,这同样适用于样式表。
我能尝试什么想法?
答案 0 :(得分:1)
这是脚本/样式助手的当前实现的一个错误,这应该用1.1-alpha1版本修复,该版本应该很快(10月初)可用,因为支持使用在ASP.NET注册的VirtualPathProvider修复了这个一般类问题(正确解析资源路径)。