Global.asax Application_BeginRequest不会触发,除非物理文件存在 - 404
我在Global.asax中使用URL重写(HttpContext.Current.RewritePath(...)
),因此物理文件通常不存在。 一切工作正常,直到我不得不从IIS(8.5)中删除站点并再次添加它。Global.asax Application_BeginRequest不会触发,除非物理文件存在 - 404
现在我得到404没有找到每个请求。示例http://localhost/site/article123
而Global.asax Application_BeginRequest
事件甚至没有发射。
如果我将在文件夹/site/article123
中添加空的default.aspx文件,所有内容都可以在正确重写URL的情况下正常工作。
文件没有改变,所以它应该是IIS配置的问题。在IIS <modules runAllManagedModulesForAllRequests="true">
项目被设置为与应用程序池.NET 2.0经典
编辑应用程序:
同样的故事在
我有内部的web.config以下IIS 8.0
问题出在Managed Pipeline Mode
设为classic
。通过将.NET v2.0 Classic
中的应用程序池更改为.NET v2.0
,将classic
切换为integrated
。
据我了解:在classic
模式IIS正在管理请求,而在intergated
模式下传入的IIS请求映射到ASP.NET引擎。
更多的管道模式:What is the difference between 'classic' and 'integrated' pipeline mode in IIS7?
您需要在IIS 8.5下安装ReWrite Module
使用Web Installer Platform进行安装。
我不认为我需要重写安装的模块。正如我所说的,我使用'HttpContext.Current.RewritePath(...)'来进行URL重写,而AFAIK它不依赖于重写模块。无论如何,我确实已经安装了ReWrite模块,所以它不是问题。 –
您是否尝试将其升级到'.net v4.5 Pool'? –
没有.net v4.5 Pool这样的东西。有没有人得到这个工作? 我有dotnet 4.0池和集成和仍然Application_BeginRequest永远不会触发IIS8。 – MC9000
我一直在综合。 30个工作池和只有1个单池不是。然后,我改变为经典,并回到集成,现在它工作。 – teapeng