将网站部署到应用程序时的 mvc 捆绑和相关 css 图像

mvc bundling and relative css image when website is deployed to an application

要将相对图像路径转换为绝对路径,在 Whosebug 中提出和回答了许多问题,例如:

MVC4 StyleBundle not resolving images

建议添加 new CssRewriteUrlTransform() 如下:

bundles.Add(new StyleBundle("~/Content/css/jquery-ui/bundle")
       .Include("~/Content/css/jquery-ui/*.css", new CssRewriteUrlTransform()));

这实际上曾经救过我。但是现在我将我的网站部署到一个应用程序(不是网站的根)仍然有一个问题:

申请是:

http://localhost/sample/

但图片网址如下:

http://localhost/css/imgs/spirit.png

虽然应该是:

 http://localhost/sample/css/imgs/spirit.png

虽然捆绑的 css link 本身是正确的并且可以工作。

This is actually just another issue with optimizations in general not working correctly when the app is running as a virtual directory.

由于您使用虚拟目录来托管您的网站,因此您应该制作一个包装器,它将使用固定路径调用 CssRewriteUrlTransform

public class CssRewriteUrlTransformWrapper : IItemTransform
{
        public string Process(string includedVirtualPath, string input)
        {           
            return new CssRewriteUrlTransform().Process("~" + VirtualPathUtility.ToAbsolute(includedVirtualPath), input);           
        }
}

More info.

如果不涉及虚拟目录,则可以执行以下代码:

bundles.Add(new StyleBundle("~/bundles/css").Include(
                "~/Content/css/*.css", new CssRewriteUrlTransform()));

但是当使用 VirtualDirectory 时,CssRewriteUrlTransform 将重写到 Host 而不是 Host/VirtualDirectory。解决方案是派生 CssRewriteUrlTransform,这在此处进行了充分讨论:ASP.NET MVC4 Bundling with Twitter Bootstrap:

public class CssRewriteUrlTransformWrapper : IItemTransform
{
    public string Process(string includedVirtualPath, string input)
    {           
        return new CssRewriteUrlTransform().Process("~" + VirtualPathUtility.ToAbsolute(includedVirtualPath), input);           
    }
}