MVC + IIS7 = CSS问题

11

我有一个运行在Vista上IIS7的网站,该站点运行在88端口,因此http://localhost:88应呈现默认的/Home/Index视图。

这个完全正常,所有其他视图也都是如此。

然而,存在一个问题。我的脚本路径指向/Scripts/[文件],我的CSS路径指向/Content/[文件]。我的想法是/Content或/Scripts文件夹始终位于网站的根目录下,因为我没有意图在虚拟目录设置中运行此站点。每当页面呈现时,它们都没有CSS或脚本!所以一切看起来奇怪,脚本显然无法工作,因此许多视图也无法工作。

这是一个非常奇怪的问题,我相信这是由于我在IIS7下托管事物的知识不足引起的。如果有人能提供任何帮助,我将不胜感激。谢谢大家!


你能发布渲染后的HTML吗?这样我们才能帮助你。 - Brian Vallelunga
当我尝试浏览http://localhost:88/Content/Site.css时,我收到一个ASPX 404错误消息。看起来CSS扩展名正在被ASPNET isapi过滤器处理(非常奇怪!)。 - brady gaster
5个回答

12

我希望这个帖子的续篇能够表达一种愿望,即确保此问题不会让任何人崩溃。各种论坛中都有很多关于在Vista上解决此问题的文档,但我找不到类似的2K8文章。如此论坛帖子所示,我已经在Vista机器上解决了这个问题。遗憾的是,在2K8上没有解决这个问题。

我已验证StaticFileHandler已被包含在web.config中,如apijunkie.com上的博客文章所建议的那样。但还是没有成功。

澄清“没有成功”的意思是,我的服务器端功能非常完美。所有MVC路由都像冠军一样工作。只是所有CSS和JS渲染失败。当浏览器直接指向CSS或JS文件时,结果页面是一个ASP.NET 404而不是“传统”的404错误页面。

因此,我进入了IIS7管理器,进入Handler Mappings对话框。我添加了一个指定System.Web.StaticFileHandler类型并将其扩展名设为*.CSS的新处理程序。然后我为*.JS、*.PNG和*.GIF文件重复了这个过程。当我在浏览器中刷新站点时,所有东西都完美地呈现出来了。下面的屏幕截图演示了这个过程。

Handler Mappings窗口:

handler mappings
(来源:windows.net)

添加新的托管处理程序

alt text
(来源:windows.net)

这解决了问题,现在我有一个在W2K中托管的完美运行的MVC应用程序。是时候来一杯Guinness了。


谢谢这个。当我也遇到这个问题时,它对我有用。 - µBio
有人可以写下步骤吗?图片无法显示。 - Jaider
1
尽管他的CSS文件返回404错误,但他的图片也是如此。 :) 总是喜欢损坏的图像链接。 - Robert Koritnik
2
@bradygaster:你能否重新上传你的图片到imgurl并将你的回答重定向到这些图片吗?因为从内容来看,它们很重要。 - Robert Koritnik
请按照Robert Koritnik的建议进行操作,我会点赞的。不要进行负面评价。 - knocte
非常抱歉图片无法显示。我已经启用了SO通知,所以这种情况不会再发生! - brady gaster

7

从控制面板进入“打开或关闭Windows功能”,然后在IIS的子子子节点中勾选“静态内容”。


这是我的问题。我建议首先检查这个。 - Elan Hasson

3
问题出在我创建应用程序的方式上。根据这里的论坛帖子,我需要选择“Classic .NET AppPool”来解决我的问题。进步真是太好了!

当我创建应用程序池时,我保留了默认模式:Integrated... 我刚刚改为Classic,似乎可以工作。谢谢。 - Jaider

0
原来这不是在Windows 2008上的修复。如果有人有解决此问题的想法,将不胜感激。
详细问题:
Windows 2K8服务器,IIS7。已打开管道并安装了静态文件支持。MVC可以工作,但CSS无法呈现。
到底怎么回事?

-2
问题并不在于授权/身份验证,而是现在管理IIS的模块。 在system.webServer中,您应该将runAllManagedModulesForAllRequests设置为false,这样您就可以显示所有图像/CSS,而无需进行身份验证。
在ASP.NET网站中,以前必须将runAllManagedModulesForAllRequests的值设置为true才能支持路由。但是,一旦IIS 7已经通过服务包进行更新,在使用ASP.NET路由时,可以将runAllManagedModulesForAllRequests的值设置为false或省略。
参考http://www.iis.net/configreference/system.webserver/modules 附言:不要忘记将以下行添加到我的web.config文件的AppSettings部分:
< add key="autoFormsAuthentication" value="false" />
< add key="enableSimpleMembership" value="false"/>

1
请停止发布相同答案的副本。它不适用于您发布它的问题。 - Andrew Barber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接