30

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

4

4 回答 4

37

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

<modules runAllManagedModulesForAllRequests="true">

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

将此设置更改为:

<modules runAllManagedModulesForAllRequests="false">

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

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

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

于 2011-06-08T23:18:48.663 回答
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>
于 2011-06-10T20:35:09.547 回答
1

在启用了 Visual Studio 开发服务器的 VS2012 /MVC3 中,RAMMFAR=false 无效。静态文件的每个请求仍会触发 Application_BeginRequest 事件处理程序。

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

于 2014-11-18T17:41:42.693 回答
0

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

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

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

于 2011-06-08T13:46:55.177 回答