防止IIS通过ASP.NET管道提供静态文件

时间:2011-06-08 13:41:54

标签: asp.net-mvc forms-authentication iis-7.5 static-files

我的css,js,图像文件的请求正在通过ASP.NET管道提供。我认为IIS默认避免这种情况,但我在Application_AuthenticateRequest断点上看到了请求,并且不需要实际验证这些请求。我已经看到了改变这种行为的相互矛盾的方法 - 最好的方法是什么?

4 个答案:

答案 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根目录中的一个设置,这意味着它适用于所有站点 - 请在此处检查处理程序映射。