代码之家  ›  专栏  ›  技术社区  ›  flipdoubt

未经身份验证的用户无法访问ASP.NET MVC中的静态文件,无论位置元素如何。

  •  4
  • flipdoubt  · 技术社区  · 15 年前

    我知道这个问题已经被问了好几次了,但是这些答案都不适用于我的情况。我有一个ASP.NET MVC2应用程序,它在以集成模式运行的应用程序池上使用本地IIS 7.5(7600.16385)上的窗体身份验证。有趣的是,这个 不会发生的 当使用与Vs2010一起提供的开发Web服务器时。我的web.config文件不包含 <authorization /> 而且没有 <location /> 元素。当我点击主页时,除了存储在 ~/Content 目录。当我直接请求.css文件时, http://localhost/WebSubscribers/Content/Site.css ,我被重定向到登录页。似乎通配符映射试图授权每个请求,即使我允许该请求使用 <location path="Content" /> 如下图所示:

    <location path="Content" >
     <system.web>
      <authorization>
       <allow users="*"/>
      </authorization>
     </system.web>
    </location>
    

    我在堆栈溢出中找到的大多数答案都建议只添加这样一个位置元素来解决这个问题,但这对我不起作用,所以我删除了它。

    我在IIS中没有创建任何通配符映射,只是为了确保删除了该站点并重新创建了指向同一目录的站点,结果是相同的。可以在除IIS之外的任何位置指定通配符映射吗?我的web.config文件可以“获得”某种通配符映射吗?我使用telerik MVC控件,它似乎对web.config文件做了一些更改(注册的名称空间、httphandlers、模块)。

    还有其他建议吗?

    更新: 当使用chrome在未经过身份验证的情况下访问网站时,“resources”开发工具会显示以下关于my site.css文件的信息:“site.css:-1resource解释为样式表,但使用mime-type-text/html传输。”

    在哪里设置这种mime类型?该站点在IIS中的节点显示“.css_text/css_inherited”。

    2 回复  |  直到 15 年前
        1
  •  10
  •   Community Mohan Dere    8 年前

    我在IIS中找到了我的问题的原因和解决方案。Web应用程序从我的Visual Studio项目目录中的IIS中运行,因此我将其配置为使用在我的用户帐户下运行的AppPool。在IIS中, 匿名验证 功能配置为 特定用户:IUSR . 我不知道为什么,也不知道怎么做。当我把这个改回 应用程序池标识 ,未经身份验证的用户可以访问静态文件。

    +1 Craig Stuntz 指出MVC和IIS7不需要通配符映射以及位置元素。

        2
  •  2
  •   Craig Stuntz    15 年前

    您不应该在集成模式下使用IIS 7的通配符映射。您只需要在IIS 6/“经典”模式下使用它。您也不需要location元素;这个“只起作用”。