我的css,js,图像文件的请求正在通过ASP.NET管道提供。我认为IIS默认避免这种情况,但我在Application_AuthenticateRequest
断点上看到了请求,并且不需要实际验证这些请求。我已经看到了改变这种行为的相互矛盾的方法 - 最好的方法是什么?
答案 0 :(得分:35)
我在这里猜测并怀疑您在web.config
文件中配置了以下设置:
<modules runAllManagedModulesForAllRequests="true">
这意味着每个请求,包括静态内容的请求都会进入管道。
将此设置更改为:
<modules runAllManagedModulesForAllRequests="false">
这假设您的应用程序在ASP.NET 4.0和MVC3下运行。
为此,您需要安装KB980368(需要重新启动)或Windows 2008R2 SP1(包括此修补程序)。这篇优秀的文章解释了这个原因:
How ASP.NET MVC Routing Works and its Impact on the Performance of Static Requests
答案 1 :(得分:12)
我最终将此添加到我的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>
答案 2 :(得分:1)
在启用了Visual Studio Development Server的VS2012 / MVC3中,RAMMFAR = false无效。每个静态文件请求仍然会命中Application_BeginRequest事件处理程序。
我切换到IIS Express并看到了所需的功能。
答案 3 :(得分:0)
在IIS配置或web.config中的某处,您设置了处理程序映射,以将这些文件映射到ASP.Net应用程序。
尝试删除您的web.config,看看您是否仍可以在没有ASP.Net的IIS中浏览这些文件类型。如果失败,你就会知道它是你的web.config - 否则你将不得不检查IIS设置。
第2步 - 放回web.configs,然后删除并重新创建网站 - 同样的问题?它是IIS根目录中的一个设置,这意味着它适用于所有站点 - 请在此处检查处理程序映射。