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?

+0

我一直在综合。 30个工作池和只有1个单池不是。然后,我改变为经典,并回到集成,现在它工作。 – teapeng

您需要在IIS 8.5下安装ReWrite Module

使用Web Installer Platform进行安装。

+0

我不认为我需要重写安装的模块。正如我所说的,我使用'HttpContext.Current.RewritePath(...)'来进行URL重写,而AFAIK它不依赖于重写模块。无论如何,我确实已经安装了ReWrite模块,所以它不是问题。 –

+0

您是否尝试将其升级到'.net v4.5 Pool'? –

+0

没有.net v4.5 Pool这样的东西。有没有人得到这个工作? 我有dotnet 4.0池和集成和仍然Application_BeginRequest永远不会触发IIS8。 – MC9000