Asp.net mvc 绑定启用优化为true时,获取请求失败

Asp.net mvc 绑定启用优化为true时,获取请求失败,asp.net-mvc,font-awesome,bundling-and-minification,Asp.net Mvc,Font Awesome,Bundling And Minification,我遇到了一个问题,字体真棒和ASP.NET的优化/捆绑功能 当EnableOptimizations设置为false时,我用于加载图像的字体工作正常: 但是,当EnableOptimizations设置为true时,将不再找到字体,并显示以下内容: 我注意到GET请求到达的路径之间存在差异: EnableOptimizations=false:localhost:3620/Content/fonts/fontowesome-webfont.woff?v=4.1.0 EnableOptimiza

我遇到了一个问题,字体真棒和ASP.NET的优化/捆绑功能

当EnableOptimizations设置为false时,我用于加载图像的字体工作正常:

但是,当EnableOptimizations设置为true时,将不再找到字体,并显示以下内容:

我注意到GET请求到达的路径之间存在差异:

EnableOptimizations=false:localhost:3620/Content/fonts/fontowesome-webfont.woff?v=4.1.0 EnableOptimizations=true:localhost:3620/fonts/fontsawesome webfont.svg?v=4.1.0

所讨论的捆绑包如下所示:

bundles.Add(new StyleBundle("~/Content/BootstrapAndFontAwesome").Include(
    "~/Content/bootstrap/bootstrapLabel.css",
    "~/Content/font-awesome/font-awesome.css"
    ));
这里发生了什么?最好的解决方法是什么

干杯

更新

根据Rowan在本文评论中的建议,我在此基础上实现了以下代码,修复了我的开发机器上的问题:

public class CssRewriteUrlTransformWrapper : IItemTransform
{
    public string Process(string includedVirtualPath, string input)
    {
        return new CssRewriteUrlTransform().Process("~" + VirtualPathUtility.ToAbsolute(includedVirtualPath), input);
    }
}
我需要进行一些实践部署,以确保它是可靠的(例如,使用虚拟IIS目录等)。到目前为止看起来不错

请注意,我必须将font awesome文件分离到它自己的包中,因为在采用CSSRWriteUrlTransform解决方案时,它不能与其他资源绑定

谢谢

使用

将URL重写为绝对URL,以便在绑定后仍能找到资产

例如:

bundles.Add(new StyleBundle("~/Content/mycss")
    .Include("~/Content/font-awesome.css", new CssRewriteUrlTransform()));

在Sytem.Web.Optimization命名空间中有一个名为CssRewriteUrlTransform的鲜为人知的类,它将帮助我们解决这个问题,或者任何引用url相关资源的css文件。新代码现在看起来像:

bundles.Add(new StyleBundle("~/content/smartadmin")
            .Include("~/content/css/font-awesome.css", new CssRewriteUrlTransform())
            .Include("~/content/css/dataTables.responsive.css")
            .IncludeDirectory("~/content/css", "*.min.css"));
对于这个问题有一个有用的解决方案,而且它似乎是由实际为Microsoft工作的人编写的ASP.net捆绑包代码

问题很可能是css文件中的图标/图像 使用相对路径,因此如果捆绑包不在同一个应用程序中 相对路径作为您的未绑定css文件,它们将成为断开的链接

在我们的待办事项列表中,我们已经在css中对URL进行了重新定位,但现在,EAIST 要做的事情是让包路径看起来像css目录,这样 相对URL只起作用,即:

更新:我们在1.1beta1版本中增加了对此的支持,因此 自动重写图像URL,可以添加新的ItemTransform 这会自动重定基址


这修复了我的问题,即在生产服务器上,由于没有正确使用相对路径,导致字体图标出现404错误

bundles.Add(new StyleBundle("~/Content/font-awesome/css/bundle").Include(
      "~/Content/font-awesome/css/font-awesome.css", new CssRewriteUrlTransform()));

你也有缩小版(
font-awesome.min.css
)吗?@StephenMuecke是的。有一个缩小版。我相信字体可怕的css使用的是相对路径,这就是问题所在。当我使用Nuget安装它时,我想知道为什么这不是一件常见的事情。这很可能是缩小文件的问题。尝试删除它,让bundler对标准文件进行缩小。@StephenMuecke我刚刚尝试了你的建议,可惜没有纠正这个问题。使用有帮助吗?我记得这是一个可能的解决方案?例如
bundles.Add(新样式包(“~/Content/mycss”)。包括(“~/Content/font awesome.css”,新CssRewriteUrlTransform())
bundles.Add(new StyleBundle("~/bundles/publiccss").Include(
            "~/Static/Css/bootstrap/bootstrap.css",
            "~/Static/Css/bootstrap/bootstrap-padding-top.css",
            "~/Static/Css/bootstrap/bootstrap-responsive.css",
            "~/Static/Css/bootstrap/docs.css", new CssRewriteUrlTransform()));
bundles.Add(new StyleBundle("~/Content/font-awesome/css/bundle").Include(
      "~/Content/font-awesome/css/font-awesome.css", new CssRewriteUrlTransform()));