在ASP.NET IIS中,资源被解释为样式表,但传输的MIME类型为text/html。

22

我有一个登录页面,但是当我执行这个页面时,css 样式被剥离了。

我从 Chrome 调试器中发现了这个信息。我正在使用 asp.net 2008。

有任何想法吗?

<head id="Head1" runat="server"> 
<title>CalibPro</title> 
<link href="css/Login.css" rel="stylesheet" type="text/css" /> 
<link href="css/Common.css" rel="stylesheet" type="text/css" /> 
</head>

根据@robx的建议进行了编辑。


我猜测有一个CSS样式表被用<script>标签调用,这些标签本应该用于JS? - robx
实际上,CSS在单独的文件中。如果需要的话,我可以发布页面代码。 - sansknwoledge
我非常清楚这是一个单独的文件,所以我说它听起来像是使用<script>标签调用CSS样式表,而该标签是用于JS文件的。外部CSS样式表需要使用<link>标签进行调用。 - robx
这是该页面的头部分节<head id="Head1" runat="server"> <title>CalibPro</title> <%--<link rel="stylesheet" type="text/css" href="Common.css" /><link rel="stylesheet" type="text/css" href="Login.css" />--%> <link href="css/Login.css" rel="stylesheet" type="text/css" /> <link href="css/Common.css" rel="stylesheet" type="text/css" /> </head> - sansknwoledge
1
为什么不直接编辑您的帖子并将其放在那里呢?这样对于每个人来说都会更容易看到。 - robx
6个回答

37

我觉得问题可能在您的IIS配置中。它可能被配置为使用text/html MIME类型提供.css文件。

尝试进入Web服务器上的MIME类型配置,看看是否能发现任何问题。

.css文件的正确MIME类型是text/css。

您还可以使用一些HTTP嗅探器如Fiddler来查看HTTP标头参数。

更新:接受的答案应该是@brett-pennings指出的那个!只需提供静态内容,错误将自动消失。


我正在使用Windows 7,您能否为我提供一些如何做到这一点的指导? - sansknwoledge
1
如果您使用IIS,只需在开始菜单的“搜索程序和文件”字段中键入iis。第一个结果将是IIS管理器。在左侧窗格树中选择您的网站,然后在中心面板的图标中查找“MIME类型”。 - Variant
好的,但我不知道到底发生了什么,从昨天开始页面就开始正常工作了,我尝试重复这个问题,但是无法做到,所以我只能等待下一次。无论如何感谢 @variant 和 @robx,我将把 variant 标记为答案。 - sansknwoledge
1
请为我工作!谢谢 :) - Ta No Bi
也适用于我 - 严肃的问题,为什么IIS默认情况下没有配置为提供静态内容? - alex

24
请确保在IIS Windows 功能中启用“静态内容”功能。

IIS设置


IIS Windows 功能在哪里?我在 Windows 服务器上安装了 IIS,但似乎找不到它。 - Chirag K
这只是“打开或关闭Windows功能”,您会在其中找到这些IIS设置。您使用的是哪个版本的Windows?您是否尝试从开始菜单中搜索“Windows功能”? - Brett Pennings

4

当您在IIS中使用重写URL时(在我的情况下就是这样),您需要在Web.config文件中添加此条目,位于重写条目之前,例如:

<rule name="CSS" stopProcessing="true">
    <match url=".css" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" />
    </conditions>
    <action type="None" />
</rule>
<rule name="mod_write" stopProcessing="true">
    <match url="^(.*)$" ignoreCase="true" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="%(REQUES_FILENAME)" matchType="IsDirectory" negate="true" />
        <add input="%(REQUES_FILENAME)" matchType="IsFile" negate="true" />
    </conditions>
    <action type="Rewrite" url="index.php?url={R:1}" appendQueryString="false" />
</rule>

非常感谢!经过数小时的搜索和尝试每一个可能的解决方案,这个解决了我的问题!问题出在我试图重写一个目录索引,但实际上是将整个文件夹重定向而不是一个文件。谢谢! - luv2code

1

哦,天啊!这是其中一种看起来突然冒出来的错误……我研究了将近一个小时,试图找出导致只有一个特定的 .css 文件在 Chrome 控制台窗口显示非常相似的消息的原因:

Resource interpreted as Stylesheet but transferred with MIME type text/plain

你看到的是text/plain而不是text/html
涉及的文件是这个:

https://raw.github.com/LPology/Bootstrap-IE7Fix/master/css/bootstrap-ie7fix.css

我在Visual Studio 2013 Ultimate中所做的是:
  • 右键单击项目的Content文件夹,选择添加样式表
  • 将文件重命名为bootstrap-ie7fix.css
  • 复制上述.css文件的全部内容
  • 将整个内容粘贴到Visual Studio中并保存文件

在我的Razor视图中以完全相同的默认方式引用此新文件,在ASP.NET MVC应用程序中:

   <link rel="stylesheet" type="text/css" href="/../itvizionlogs/widgets/Content/bootstrap-ie7fix.css">

对于任何疯狂/未知的原因,该文件在Chrome、Firefox、Internet Explorer中都无法显示。这个文件到底发生了什么事情,因为在相同的/Content目录中的所有其他文件都能够正常加载?
我最后尝试了这个: 我猜Visual Studio最初可能会搞乱那个文件的编码或类似的事情!

0
我不知道你是否在框架中开发了你的项目。 当我在 ThinkPHP 框架中开发时,我遇到了这些错误。 原因是该框架对包含 CSS 文件的路径有一些规则,所以如果你使用该框架,你可以检查一下该框架是否有其外部 CSS 文件或 JavaScript 文件路径的规则。

0

我曾经在使用webpack-dev-server时遇到过这个问题,原因是防火墙阻止了网络访问。一开始我并没有意识到这是与网络有关的,因为我认为我已经将所有的CSS打包而不依赖外部资源。但是在深入挖掘后,我发现另一个CSS文件试图从fonts.gstatic.com加载外部字体,加上我的防火墙,导致了我的问题。


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