【问题标题】:Static images and CSS not showing (401) but bundled css and js do静态图像和 CSS 未显示 (401) 但捆绑的 css 和 js 显示
【发布时间】:2014-01-28 07:35:55
【问题描述】:

我们刚刚在生产环境中部署了一个 ASP.NET MVC 4 webapp,并且正在试验一种奇怪的行为:该应用可以运行,但是图像没有显示并且部分 CSS 没有加载

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

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

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

我们已经检查过了:

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

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

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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

    HTTP 401:未授权

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

    你可以使用:

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

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

    【讨论】:

      【解决方案2】:

      我终于明白了……

      1. 匿名身份验证已启用(并使用默认配置暗示代码看到的用户是用户 IUSR)。
      2. Web 应用程序的文件未存储在安装 IIS 的本地,而是存储在某种网络共享驱动器上....
      3. 在那个地方,IUSR 没有读取权限,因此无法读取静态资源。

      我不得不更改默认的“pass-through authentication”,指定本地执行不作为“经过身份验证的用户”(在这种情况下为 IUSR)。

      在IIS的WebApp基本设置中,不要使用“pass-throuh”认证,使用“Connect as

      【讨论】:

        【解决方案3】:

        也在为此苦苦挣扎...通过在我的共享视图中使用 @Styles.Render("Location_and_Name_of_CSS_file") 而不是 HTML“链接”标签来解决它

        希望这对某人有所帮助

        【讨论】:

          【解决方案4】:

          在我的情况下,以上都不足以解决问题。在花了几乎一整天的时间后,我发现我还必须更改我的视图以使用 @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】:

            我能够通过..修复它。

            1. 导航到 IIS 中包含 css 文件的文件夹
            2. 双击“功能视图”上的“身份验证”图标
            3. 如图所示,右键单击匿名身份验证,然后选择编辑
            4. 选择“应用程序池标识”选项,如图所示
            5. 重启网站

            【讨论】:

              【解决方案6】:

              要使用直通身份验证进行此操作:

              虽然应用程序池设置为用户 NetworkService,但 local\Users 也需要对物理路径的读取权限。

              【讨论】:

                【解决方案7】:

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

                【讨论】:

                  猜你喜欢
                  • 2016-03-12
                  • 2014-07-20
                  • 1970-01-01
                  • 2012-02-08
                  • 2015-02-28
                  • 2020-04-02
                  • 2012-07-05
                  • 1970-01-01
                  • 2015-07-10
                  相关资源
                  最近更新 更多