例如:
public class MyModule:IHttpModule { public void Dispose(){ } public void Init(HttpApplication context) { context.BeginRequest += (o,e) => Debug.Print("Request: " + HttpContext.Current.Request.RawUrl); } }
我以这种方式宣布:
<modules runAllManagedModulesForAllRequests="true"> <add name="MyModule" preCondition="managedHandler" type="MVCX.Modules.MyModule,MVCX"/> </modules>
但是,即使使用前提条件,我可以看到静态文件如何通过模块:
Request: /MVCX/ Request: /MVCX/Content/Site.css Request: /MVCX/Scripts/jquery-1.4.4.min.js
我试图忽略静态文件的规则,但没有什么区别:
routes.IgnoreRoute("{Content}/{*pathInfo}"); routes.IgnoreRoute("{Scripts}/{*pathInfo}");
这是平常吗?还是我在这里遗漏的东西?据我所知,如果静态文件请求应该由IIS应答.如果我的受管模块被击中,意味着CLR ThreadPool线程正在处理该请求,对吧?
问候.
更新:
我已经禁用了“runAllManagedModulesForAllRequests”:
<modules runAllManagedModulesForAllRequests="false"> <add name="MyModule" preCondition="managedHandler" type="MVCX.Modules.MyModule,MVCX" /> </modules>
并且一切似乎工作正常,但我发现这篇文章:http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html建议删除和读取“UrlRoutingModule-4.0”模块与一个空的前提条件.
我的机器,该模块的添加在根web.config,它已经有一个空的preCondition:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config>type machine.config | find "UrlRouting" C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config>type web.config | find "UrlRouting" <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" /> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config>
所以现在我有点困惑,这个参数的状态是什么?我应该使用还是不应该?为什么默认情况下为“真”?
问候.
解决方法
I my machine,the adding of that module is in the root web.config,and it has already an empty preCondition
完善.这意味着这个模块将始终运行,这是MVC需要的,因为它使用可扩展的URL.
So now I am a little bit confused,what is the status of this parameter? Should I use it or shouldn’t? why does it come as “true” by default?
因为IIS7 SP1和IIS7.5 SP1中的扩展名url支持是新的.
它可用于IIS7作为您必须请求和安装的修补程序.
你会在这里找到你的问题的完整答案:
http://support.microsoft.com/kb/980368
为什么这个参数默认为true?因为VS2010是在IIS7 SP1之前发货的.也许在VS2010SP1的新MVC项目中是虚假的?