要将相对图像路径转换为绝对路径,在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);
}
}
更多信息。