当网站部署到应用程序时,MVC绑定和相对CSS图像



要将相对图像路径转换为绝对路径,在stackoverflow中有许多问题要问和回答,就像这样:

MVC4 StyleBundle不解析图像

建议添加new CssRewriteUrlTransform()如下:

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

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

应用程序是:

http://localhost/sample/

但是图像的url是这样的:

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

而它应该是:

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

如果没有涉及到虚拟目录,可以使用以下代码:

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

但是当使用VirtualDirectory时,CssRewriteUrlTransform将重写为Host而不是Host/VirtualDirectory。解决方案是派生CssRewriteUrlTransform,这里详细讨论:NET MVC4捆绑与Twitter Bootstrap:

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

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

因为你使用一个虚拟目录来托管你的网站,所以你应该做一个包装器,将调用CssRewriteUrlTransform与固定路径:

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

更多信息。

最新更新