Nic*_*oad 1 css c# asp.net-mvc asp.net-mvc-5
我正在尝试为我的MVC5项目捆绑CSS文件,而我遇到了相对URL的问题.在你复制重复的问题按钮之前,我已经阅读了其他类似的问题,答案还没有解决我需要处理的特殊情况.
我正在处理的项目将作为常规IIS站点下的应用程序运行,这意味着它不会位于域的根目录下.当使用开箱即用的URL转换时这是一个问题,CssRewriteUrlTransform()因为它(愚蠢地,在我的拙见)中没有考虑URL中的应用程序名称,而是生成将域根作为处理的绝对路径.起始水平.假设我有以下文件夹结构:
site
'--- content
|--- css
| '--- style.css
'--- images
'--- logo.png
Run Code Online (Sandbox Code Playgroud)
如果我使用这样的相对URL:
background-image: url('../images/logo.png');
Run Code Online (Sandbox Code Playgroud)
它变成了:
background-image: url('http://domainname.com/content/images/logo.png');
Run Code Online (Sandbox Code Playgroud)
问题是,我需要它在进行转换时尊重应用程序/子目录名称.解决方案还应保留查询字符串.
background-image: url('http://domainname.com/applicationname/content/images/logo.png[?querystring]
Run Code Online (Sandbox Code Playgroud)
我发现的最接近的是AcidPAT在这个问题上提供的解决方案:MVC4 StyleBundle没有解析图像
但是这个解决方案不能为我编译,因为它似乎被response.Files视为IEnumerable,而实际上它是一个IEnumerable - 也许这从MVC4变为MVC5.
摘要
我需要一种在捆绑它们时自动将CSS中的相对路径转换为绝对路径的方法.解决方案需要了解应用程序的实际位置,因此如果应用程序安装在域的子目录下,它应该可以工作.该解决方案还需要保留相对URL中的任何查询字符串.
任何人都可以提供一些指导吗?
最接近的解决方案是这个要点:https://gist.github.com/dotnetchris/3d1e4fe9b0fa77eefc82唯一的问题是它似乎与MVC5不兼容.具体地说,从第12行开始的块开始遍历BundleFile对象列表,似乎将它们视为FileInfo对象,因此正在调用不存在的属性.
我相信这可能是CssRewriteUrlTransform的一个错误.它将解析主机但不解析虚拟目录.这就是我使用的.它只是一个包装类,允许捆绑过程正确解析.
public class CssRewriteUrlTransformWrapper : IItemTransform
{
public string Process(string includedVirtualPath, string input)
{
return new CssRewriteUrlTransform().Process("~" + VirtualPathUtility.ToAbsolute(includedVirtualPath), input);
}
}
Run Code Online (Sandbox Code Playgroud)
用法...
bundles.Add(new StyleBundle("~/Content/css")
.Include("~/Content/Site.css", new CssRewriteUrlTransformWrapper()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1792 次 |
| 最近记录: |