静态图像和CSS没有显示(401)但捆绑的css和js

时间:2014-01-09 16:16:23

标签: asp.net-mvc asp.net-mvc-4 iis

我们刚刚在生产中部署了一个ASP.NET MVC 4 webapp并正在尝试一种奇怪的行为:该应用程序正常运行,但图像未显示且部分CSS未加载

在分析HTTP请求时,我可以看到:

  • 请求图片(* .png)失败 401 状态代码
  • 使用 401 状态代码
  • 请求css文件失败
  • 对捆绑资源(* .js / * .css)的请求成功

应用程序在我们的Dev / Integration / Staging和Pre-Prod环境中正常工作,所以我希望它是一些IIS配置技巧....

我们已经检查过:

  • 仅在IIS
  • 中启用匿名身份验证
  • IIS池用户具有对资源的读取权限

我应该补充说,还配置了一些旧的HTTP模块(如果未经过身份验证,他们负责将用户重定向到某个登录页面......)

(我不知道这是否相关,但是当访问其根Url(虚拟目录)而没有尾随斜杠时,应用程序失败且HTTP状态为401 ...即https://{the domain}/{WebApp Name}失败但https://{the domain}/{WebApp Name}/工作正常)

有关可能发生的事情的任何线索?

谢谢!

7 个答案:

答案 0 :(得分:7)

我终于弄清楚了......

  1. 启用了匿名身份验证(并使用默认配置,暗示代码看到的用户是用户IUSR)。
  2. Web应用程序的文件未存储在安装IIS的本地,而是存储在某种网络共享驱动器上....
  3. 在那个地方,IUSR没有读取权限,因此无法读取静态资源。
  4. 我必须更改默认的“传递身份验证”,指定本地执行不是“经过身份验证的用户”(在这种情况下是IUSR)。

    在IIS中的WebApp基本设置中,请勿使用“pass-throuh”身份验证,请使用“连接为

    do not use pass-through authentication enter image description here

答案 1 :(得分:7)

Folder Authentication in IIS[![][1]] 2

我能够修复它.. 1.导航到IIS中具有css文件的文件夹 2.双击“功能视图”上的“身份验证”图标 3.右键单击图中所示的匿名验证,然后选择编辑 4.选择“应用程序池标识”选项,如图所示 5.停止并启动IIS

答案 2 :(得分:0)

HTTP 401:未经授权

这意味着您的图片和css文件位于需要授权的文件夹中,并且网站用户无权查看它们。

您可以使用:

  • 列出项web.config location元素
  • 或为css和images文件夹创建特定的web.config,并允许匿名访问

Setting authorization rules for a particular page or folder in web.config

答案 3 :(得分:0)

在这个问题上也很挣扎......在我的共享视图中使用@ Styles.Render(“Location_and_Name_of_CSS_file”)而不是HTML“链接”标记来解决它

希望这有助于某人

答案 4 :(得分:0)

在我的情况下,以上都不足以解决问题。花了将近一整天的时间后,我发现我还必须更改我的视图以使用@Url助手。

我之前:

<img src="/Home/RetrieveImage" alt="" width="200" height="200">

如果我通过直接Url http://localhost/{applicationname}/Home/RetrieveImage访问但未按原样加载索引视图(错误401),则会有效。

我把它改为:

img src="@Url.Action("RetrieveImage")" alt="" width="200" height="200"

问题得到解决。

答案 5 :(得分:0)

要通过传递身份验证进行此操作:

尽管将应用程序池设置为用户NetworkService,但本地\用户还需要对物理路径的读取权限。

答案 6 :(得分:-1)

您也可以尝试以管理员身份运行IIS。