首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法停止触发静态内容的ASP.NET模块

无法停止触发静态内容的ASP.NET模块
EN

Stack Overflow用户
提问于 2012-10-25 02:20:35
回答 1查看 2.5K关注 0票数 6

我在一个ASP.NET MVC应用程序中有一个模块。该模块运行良好,但它对每种类型的文件(包括静态内容)都会触发,尽管我有:

代码语言:javascript
复制
<modules  runAllManagedModulesForAllRequests="false">
    <add name="MyModule" ... / >
</modules>

该模块连接AcquireRequestState和PostRequestHandlerExecute事件,并且都显示静态内容触发(.htm、.css、.png等)。

我的印象是,runAllManagedModulesForAllRequests="false“应该防止模块在非ASP.NET内容上触发。

澄清:

I可以设置preCondition="managedHandler“如下:

代码语言:javascript
复制
<add name="MyModule" type="MyApp.MyModule" preCondition="managedHandler" />

让我的模块只触发托管请求。

但是,我正试图理解IIS管道为什么会为每个请求触发托管模块命中。我认为这在以前的版本中很好,除非runAllManagedModulesForAllRequests="true“它不会将非托管内容激发到ASP.NET模块中。

运行在IIS8上的Windows 8 64位模式,与集成流水线模式。

更新:

经过更多的研究后,事实证明以下情况是正确的:

  • 如果runAllManagedModulesForAllRequests=“真”所有模块-不管它们的preCondition属性设置对所有请求。对于在Application_XXXX上实现的HttpApplication事件也是如此
  • runAllManagedModulesForAllRequests="false“并不能阻止非托管请求击中模块,除非设置了preCondition="managedHandler”。
  • runAllManagedModulesForAllRequests="false“确实会影响Application_XXXX事件,从而导致这些事件只触发托管请求。,Application_XXXX的行为就好像‘模块’实现有一个preCondition="managedHandler“

有关这方面的更多详细信息,我张贴了一个博客条目:http://www.west-wind.com/weblog/posts/2012/Oct/25/Caveats-with-the-runAllManagedModulesForAllRequests-in-IIS-78

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-25 04:19:23

在IIS7中,微软引入了一种通过使用托管(.NET)代码开发模块和处理程序的新方法,而不仅仅是本机代码。问题是在托管代码和本地代码之间切换请求是非常昂贵的,因此微软引入了preCondition="managedHandler"。它将模块标记为仅适用于托管内容请求(.aspx、.asmx、.)因此IIS避免为静态内容触发它。

现在,您可以在需要修改静态内容请求的情况下,例如动态地缩小JavaScript。您可以使用C#编写模块并将其编译为托管模块,但是您希望为静态内容触发它,因此您只需将其标记为managedHandler即可。

最后,runAllManagedModulesForAllRequests="true"被用来覆盖preCondition="managedHandler",这样所有的preCondition="managedHandler"都会被触发。

有更多的信息可在以下网站获得:

http://www.iis.net/learn/get-started/introduction-to-iis/iis-modules-overview#Precondition

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13060678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档