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

时间:2015-09-06 09:53:27

标签: css asp.net asp.net-mvc-4 bundle bundling-and-minification

要将相对图像路径转换为绝对路径,有很多问题需要在stackoverflow中提出并回答,如下所示:

API documentation

建议添加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链接本身是正确的并且正常工作。

2 个答案:

答案 0 :(得分:5)

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

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);           
    }
}

答案 1 :(得分:1)

  

这实际上只是优化的另一个问题   当应用程序作为虚拟目录运行时正常工作。

由于您正在使用虚拟目录来托管您的网站,因此您应该创建一个使用固定路径调用CssRewriteUrlTransform的包装器:

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

More info