我知道这个问题在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”。
答案 0 :(得分:10)
我在IIS中找到了问题的原因和解决方案。 Web应用程序在我的Visual Studio Projects目录中运行在IIS中,因此我将其配置为使用在我的用户帐户下运行的AppPool。在IIS中,匿名身份验证功能配置为特定用户:IUSR 。我不知道为什么或如何。当我将其更改回应用程序池标识时,未经身份验证的用户可以访问静态文件。
+1到Craig Stuntz指出MVC和IIS 7不需要通配符映射以及位置元素。
答案 1 :(得分:2)
您不应该在集成模式下为IIS 7使用通配符映射。您只需要IIS 6 /“经典”模式。您也不需要location元素;这“只是有效。”