CssRewriteUrlTransform

CssRewriteUrlTransform

我们在我们的网站中使用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

10-08 17:50