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

时间:2010-11-11 15:43:08

标签: visual-studio-2010 asp.net-mvc-2 web-config telerik authorization

我知道这个问题在SO上已被问过几次,但这些答案都没有在我的情况下起作用。我有一个ASP.NET MVC2应用程序,它在我的本地IIS 7.5(7600.16385)上以集成模式运行的AppPool上使用Forms身份验证。有趣的是,使用VS 2010附带的开发Web服务器时,不会发生。我的web.config文件不包含<authorization /><location />个元素。当我点击主页时,除了存储在~/Content目录中的.CSS和.PNG文件之外,我在登录视图中获取所有内容。当我直接使用http://localhost/WebSubscribers/Content/Site.css请求.CSS文件时,我被重定向到登录页面。看起来像通配符映射尝试授权每个请求,即使我使用<location path="Content" />允许该请求,如下所示:

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

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

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

还有其他建议吗?

更新:当使用Chrome浏览网站而未经过身份验证时,“资源”开发人员工具会针对我的Site.css文件说明以下内容:“Site.css:-1Resource被解释为样式表但是使用MIME类型text / html传输。“

这样的哑剧类型会在哪里设置? IIS中的站点节点显示“.css | text / css | Inherited”。

2 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:2)

您不应该在集成模式下为IIS 7使用通配符映射。您只需要IIS 6 /“经典”模式。您也不需要location元素;这“只是有效。”