【发布时间】:2015-02-06 19:08:14
【问题描述】:
我正在尝试为我的 MVC5 项目捆绑 CSS 文件,但遇到了相对 URL 的问题。在您捣碎重复问题按钮之前,我已经阅读了其他类似的问题,但答案并未涉及我需要处理的特定情况。
我正在处理的项目将作为应用程序在常规 IIS 站点下运行,这意味着它不会位于域的根目录。这是使用开箱即用的 URL 转换 CssRewriteUrlTransform() 时出现的问题,因为它(愚蠢地,以我的拙见)没有考虑 URL 中的应用程序名称,而是生成处理域的绝对路径root 作为起始级别。假设我有以下文件夹结构:
site
'--- content
|--- css
| '--- style.css
'--- images
'--- logo.png
如果我使用这样的相对 URL:
background-image: url('../images/logo.png');
它被转换为:
background-image: url('http://domainname.com/content/images/logo.png');
问题是,我需要它在进行转换时尊重应用程序/子目录名称。该解决方案还应保留查询字符串。
background-image: url('http://domainname.com/applicationname/content/images/logo.png[?querystring]
我找到的最接近的是 AcidPAT 在这个问题上提供的解决方案:MVC4 StyleBundle not resolving images
但该解决方案无法为我编译,因为它似乎将 response.Files 视为 IEnumerable,而实际上它是 IEnumerable - 也许这已从 MVC4 更改为 MVC5。
总结
我需要一种在捆绑 CSS 时自动将相对路径转换为绝对路径的方法。该解决方案需要了解应用程序的实际 位置,因此如果应用程序安装在域的子目录下,它应该可以工作。该解决方案还需要保留相对 URL 中的所有查询字符串。
任何人都可以提供一些指导吗?
最接近的解决方案是这个要点:https://gist.github.com/dotnetchris/3d1e4fe9b0fa77eefc82,唯一的问题是它似乎与 MVC5 不兼容。具体来说,从第 12 行开始迭代 BundleFile 对象列表的块似乎将它们视为 FileInfo 对象,因此正在调用不存在的属性。
【问题讨论】:
标签: c# css asp.net-mvc asp.net-mvc-5