我的问题与此类似:
除非我想坚持使用MVC自己的捆绑,如果可以的话.我正在脑力崩溃试图弄清楚用于指定样式包的正确模式是什么,例如jQuery UI工作的独立css和图像集.
我有一个典型的MVC站点结构,/Content/css/其中包含我的基本CSS,如styles.css.在该css文件夹中,我还有子文件夹,例如/jquery-ui包含其CSS文件和/images文件夹的子文件夹.jQuery UI CSS中的图像路径是相对于该文件夹的,我不想搞砸它们.
据我所知,当我指定一个StyleBundle我需要指定一个不匹配真实内容路径的虚拟路径时,因为(假设我忽略了到内容的路由),IIS将尝试将该路径解析为物理文件.所以我指的是:
bundles.Add(new StyleBundle("~/Content/styles/jquery-ui")
.Include("~/Content/css/jquery-ui/*.css"));
Run Code Online (Sandbox Code Playgroud)
渲染使用:
@Styles.Render("~/Content/styles/jquery-ui")
Run Code Online (Sandbox Code Playgroud)
我可以看到要求:
http://localhost/MySite/Content/styles/jquery-ui?v=nL_6HPFtzoqrts9nwrtjq0VQFYnhMjY5EopXsK8cxmg1
Run Code Online (Sandbox Code Playgroud)
这将返回正确的,缩小的CSS响应.但随后浏览器发送相对链接图像的请求,如下所示:
http://localhost/MySite/Content/styles/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
Run Code Online (Sandbox Code Playgroud)
这是一个404.
我知道我的URL的最后一部分jquery-ui是一个无扩展名的URL,我的包的处理程序,所以我可以看到为什么相对的图像请求是简单的/styles/images/.
所以我的问题是处理这种情况的正确方法是什么?
我正在使用MVC4编写的app ports上运行一个应用程序.
一捆css文件不起作用.在调试模式的本地计算机中,我看到了应用程序的代码,我看到了文件.该应用程序按预期工作.
<link href="/Content/css/home/basic-jquery-slider.css" rel="stylesheet"/>
<link href="/Content/css/home/Home.css" rel="stylesheet"/>
Run Code Online (Sandbox Code Playgroud)
当我将应用程序上传到Appharbor时,我在代码中看到了捆绑包但是App无法正常工作.
<link href="/Content/css/home?v=zhVOIpUNuvCOZhJyBcQWpMlozayor4te6k-pM29wHqI1" rel="stylesheet"/>
Run Code Online (Sandbox Code Playgroud)
当我浏览那个链接时,href我得到403 - 禁止访问:访问被拒绝.
如何解决这个问题?
我们在我们的站点中使用MVC Bundling,CssRewriteUrlTransform确保图像URL在动态bundle css文件中工作.
但这只适用于不使用虚拟目录的情况,即
http://localhost/VirttualDir不行,但http://localhost/确实如此.这是因为CssRewriteUrlTransform在重写URL时,转换不会考虑虚拟文件夹.因此,如果图像真实路径是localhost/vdir/content/img/foo.png它将重写它localhost/content/img/foo.png是错误的