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

ken*_*ner 30 asp.net-mvc forms-authentication static-files iis-7.5

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

Kev*_*Kev 36

我在这里猜测并怀疑您在web.config文件中配置了以下设置:

<modules runAllManagedModulesForAllRequests="true">
Run Code Online (Sandbox Code Playgroud)

这意味着每个请求(包括静态内容的请求)都会触及管道.

将此设置更改为:

<modules runAllManagedModulesForAllRequests="false">
Run Code Online (Sandbox Code Playgroud)

这假设您的应用程序在ASP.NET 4.0和MVC3下运行.

为此,您需要安装KB980368(需要重新启动)或Windows 2008R2 SP1(包括此修补程序).这篇优秀的文章解释了这个原因:

ASP.NET MVC路由的工作原理及其对静态请求性能的影响


ken*_*ner 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>
Run Code Online (Sandbox Code Playgroud)

  • 这只是阻止了身份验证,但静态文件请求仍然在命中您的托管模块.@Kev有正确的答案. (6认同)