对我的 css、js、图像文件的请求是通过 ASP.NET 管道提供的。我认为 IIS 默认情况下会避免这种情况,但是我在Application_AuthenticateRequest
断点上看到了请求,并且不需要对这些请求进行实际身份验证。我已经看到了改变这种行为的相互矛盾的方法——最好的方法是什么?
4 回答
我在这里猜测并怀疑您在web.config
文件中配置了以下设置:
<modules runAllManagedModulesForAllRequests="true">
这意味着每个请求,包括对静态内容的请求,都会进入管道。
将此设置更改为:
<modules runAllManagedModulesForAllRequests="false">
这是假设您的应用程序在 ASP.NET 4.0 和 MVC3 下运行。
为此,您需要安装KB980368(需要重新启动)或 Windows 2008R2 SP1(包括此修补程序)。这篇优秀的文章解释了这样做的原因:
我最终将它添加到我的 web.config 中。我知道我所有的静态文件都将存在于这些文件夹中,所以它可以满足我的需要。
<location path="scripts">
<system.web>
<authentication mode="None" />
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="styles">
<system.web>
<authentication mode="None" />
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="images">
<system.web>
<authentication mode="None" />
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
在启用了 Visual Studio 开发服务器的 VS2012 /MVC3 中,RAMMFAR=false 无效。静态文件的每个请求仍会触发 Application_BeginRequest 事件处理程序。
我切换到 IIS Express 并看到了所需的功能。
在您的 IIS 配置或 web.config 中的某处,您设置了一个处理程序映射来将这些文件映射到您的 ASP.Net 应用程序。
尝试删除您的 web.config,看看您是否仍然可以在没有 ASP.Net 的情况下从 IIS 中浏览到这些文件类型。如果失败,您将知道这是您的 web.config - 否则您将不得不检查 IIS 设置。
第 2 步 - 将 web.configs 放回去,然后删除并重新创建站点 - 同样的问题?这是 IIS 根目录中的设置,这意味着它适用于所有站点 - 在此处检查处理程序映射。