我们在我们的网站中使用MVC bundle ,CssRewriteUrlTransform
可以确保图片网址在动态 bundle 包CSS文件中有效。
但这仅在不使用虚拟目录时有效,即http://localhost/VirttualDir
不起作用,但http://localhost/
起作用。这是因为在重写URL时CssRewriteUrlTransform
转换不考虑虚拟文件夹。因此,如果图像的真实路径是localhost/vdir/content/img/foo.png
,它将把它重写为localhost/content/img/foo.png
,这是错误的
最佳答案
我不确定是否完全了解您的问题,但是在此处看到http://localhost
似乎是错误的。您绝对不要为 bundle 包使用绝对URL。
对我来说CssRewriteUrlTransform可以完美地工作,这是我的使用方式:
bundles.Add(new StyleBundle("~/bundles/css").Include(
"~/Content/css/*.css", new CssRewriteUrlTransform()));
“ bundle ”是虚拟的。
这有帮助吗?
更新
当您谈论IIS VirtualDir时,我对“VirtualDir”一事感到困惑,并且我在考虑 bundle VirtualDir!的确,在这种情况下,CssRewriteUrlTransform会将URL重写为主机,而不是重写为Host/VirtualDir URI。
为此,您必须派生CssRewriteUrlTransform使其执行所需的操作。
这里有一个很好的讨论:ASP.NET MVC4 Bundling with Twitter Bootstrap
似乎那里是最好的答案:http://aspnetoptimization.codeplex.com/workitem/83
public class CssRewriteUrlTransformWrapper : IItemTransform
{
public string Process(string includedVirtualPath, string input)
{
return new CssRewriteUrlTransform().Process("~" + VirtualPathUtility.ToAbsolute(includedVirtualPath), input);
}
}
使用此类而不是CssRewriteUrlTransform