Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 防止IIS通过ASP.NET管道提供静态文件_Asp.net Mvc_Forms Authentication_Iis 7.5_Static Files - Fatal编程技术网

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

Asp.net mvc 防止IIS通过ASP.NET管道提供静态文件,asp.net-mvc,forms-authentication,iis-7.5,static-files,Asp.net Mvc,Forms Authentication,Iis 7.5,Static Files,对我的css、js和图像文件的请求通过ASP.NET管道提供。我认为IIS在默认情况下避免了这种情况,但是我在我的应用程序\u AuthenticateRequest断点上看到了请求,并且没有必要实际验证这些请求。我见过一些相互冲突的方法来改变这种行为-最好的方法是什么?在IIS配置或web.config中的某个地方,您设置了一个处理程序映射来将这些文件映射到ASP.Net应用程序 尝试删除您的web.config,并查看是否仍然可以在没有ASP.Net的情况下从IIS中浏览到这些文件类型。如果

对我的css、js和图像文件的请求通过ASP.NET管道提供。我认为IIS在默认情况下避免了这种情况,但是我在我的
应用程序\u AuthenticateRequest
断点上看到了请求,并且没有必要实际验证这些请求。我见过一些相互冲突的方法来改变这种行为-最好的方法是什么?

在IIS配置或web.config中的某个地方,您设置了一个处理程序映射来将这些文件映射到ASP.Net应用程序

尝试删除您的web.config,并查看是否仍然可以在没有ASP.Net的情况下从IIS中浏览到这些文件类型。如果失败,您将知道这是您的web.config,否则您必须检查IIS设置


第2步-放回web.configs,然后删除并重新创建站点-同一问题?这是IIS根目录中的一个设置,这意味着它适用于所有站点-请检查此处的处理程序映射。

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

<modules runAllManagedModulesForAllRequests="true">

这意味着每一个请求,包括静态内容的请求,都会进入管道

将此设置更改为:

<modules runAllManagedModulesForAllRequests="false">

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

要使其正常工作,您需要安装(需要重新启动)或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无效。对静态文件的每个请求仍然会命中应用程序\u BeginRequest事件处理程序


我切换到IIS Express并看到了所需的功能。

在“路径”属性中是否允许多个值?根据下面的链接,它们不是:这只是阻止身份验证,但是静态文件请求仍然会命中托管模块@Kev的答案是正确的。如果不更改applicationhost.config设置,就无法覆盖,是吗?这是可行的,但我确实不想更改该设置,因为它会影响其他内容。希望有一个alternative@qntmfred-哦,又是你好:)。您是否有机会更新您的问题并解释您所说的“因为它会影响其他东西”是什么意思?当然,但我必须记住它最初是什么>。我确实做到了这一点,而且它工作得非常完美,对于我的自定义模块,我使用premission=“managedHandler”。@jackncoke-我想是这样的。我现在没有ASP.NET/MVC/IIS开发空间,所以没有机会查看。吮吸它,看看:)